home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / anims < prev    next >
Text File  |  1997-01-31  |  53KB  |  3,788 lines

  1. BRIGHTENPOINTS:
  2. ; d0=brightness value
  3. ; d1=XPOS
  4. ; d2=ZPOS
  5. ; d3=ROOMNUMBER
  6.  
  7.  tst.w d0
  8.  bgt DARKENPOINTS
  9.  
  10.  movem.l d0-d7/a0-a6,-(a7)
  11.  
  12.  move.l ZoneAdds,a0
  13.  move.l (a0,d3.w*4),a0
  14.  add.l LEVELDATA,a0
  15.  move.l #CurrentPointBrights,a2
  16.  move.l Points,a3
  17.  
  18.  move.l a0,a1
  19.  add.w ToZonePts(a0),a1
  20. BRIGHTPTS:
  21.  move.w (a1)+,d4
  22.  blt.s brightall
  23.  move.w (a3,d4.w*4),d5
  24.  move.w 2(a3,d4.w*4),d6
  25.  sub.w d1,d5
  26.  bgt.s .okpos1
  27.  neg.w d5
  28. .okpos1
  29.  
  30.  sub.w d2,d6
  31.  bgt.s .okpos2
  32.  neg.w d6
  33. .okpos2
  34.  
  35.  add.w d5,d6
  36.  asr.w #5,d6
  37.  add.w d0,d6
  38.  bge.s BRIGHTPTS
  39.  
  40.  add.w d6,(a2,d4.w*4)
  41.  add.w d6,2(a2,d4.w*4)
  42.  bra.s BRIGHTPTS
  43.  
  44. brightall:
  45.  
  46.  movem.l (a7)+,d0-d7/a0-a6
  47.  rts
  48.  
  49.  
  50. BRIGHTENPOINTSANGLE:
  51. ; d0=brightness value
  52. ; d1=XPOS
  53. ; d2=ZPOS
  54. ; d3=ROOMNUMBER
  55. ; d4=ANGLE
  56.  
  57.  movem.l d0-d7/a0-a6,-(a7)
  58.  
  59.  move.l #SineTable,a0
  60.  lea (a0,d4.w),a4
  61.  
  62.  move.l ZoneAdds,a0
  63.  move.l (a0,d3.w*4),a0
  64.  add.l LEVELDATA,a0
  65.  move.l #CurrentPointBrights,a2
  66.  move.l Points,a3
  67.  
  68.  move.l a0,a1
  69.  add.w ToZonePts(a0),a1
  70. BRIGHTPTSA:
  71.  move.w (a1)+,d3
  72.  blt brightallA
  73.  move.w (a3,d3.w*4),d4
  74.  move.w 2(a3,d3.w*4),d5
  75.  
  76.  sub.w d1,d4
  77.  move.w d4,d6
  78.  bgt.s .okpos1
  79.  neg.w d4
  80. .okpos1
  81.  
  82.  sub.w d2,d5
  83.  move.w d5,d7
  84.  bgt.s .okpos2
  85.  neg.w d5
  86. .okpos2
  87.  
  88.  movem.l d0/d1/d2/d3/d4/d5,-(a7)
  89.  
  90.  move.w (a4),d0
  91.  move.w 2048(a4),d1
  92.  muls d7,d1
  93.  muls d6,d0
  94.  add.l d0,d1
  95.  ble.s BEHINDPT
  96.  move.l d1,d5
  97.  neg.l d5
  98.  add.l #30*65536,d5
  99.  bge.s .okkkkk
  100.  moveq #0,d5
  101. .okkkkk
  102.  
  103.  move.w (a4),d0
  104.  move.w 2048(a4),d1
  105. ; ext.l d0
  106. ; ext.l d1
  107. ; asl.l #6,d1
  108. ; asl.l #6,d0
  109. ; swap d0
  110. ; swap d1
  111. ; neg.w d0
  112. ; neg.w d1
  113. ; add.w d6,d0
  114. ; add.w d7,d1
  115.  
  116.  muls d0,d7
  117.  muls d1,d6
  118.  sub.l d6,d7
  119.  bgt.s .okkk
  120.  neg.l d7
  121. .okkk
  122.  
  123.  add.l d5,d7
  124.  asl.l #4,d7
  125.  swap d7
  126.  
  127.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  128.  
  129.  add.w d7,d5
  130.  add.w d4,d5
  131.  asr.w #7,d5
  132.  add.w d0,d5
  133.  bge BRIGHTPTSA
  134.  
  135.  add.w d5,(a2,d3.w*4)
  136.  add.w d5,2(a2,d3.w*4)
  137.  bra BRIGHTPTSA
  138.  
  139. BEHINDPT:
  140.  movem.l (a7)+,d0/d1/d2/d3/d4/d5
  141.  bra BRIGHTPTSA 
  142.  
  143. brightallA:
  144.  
  145.  movem.l (a7)+,d0-d7/a0-a6
  146.  rts
  147.  
  148. DARKENPOINTS
  149.  movem.l d0-d7/a0-a6,-(a7)
  150.  
  151.  move.l ZoneAdds,a0
  152.  move.l (a0,d3.w*4),a0
  153.  add.l LEVELDATA,a0
  154.  move.l #CurrentPointBrights,a2
  155.  move.l Points,a3
  156.  
  157.  move.l a0,a1
  158.  add.w ToZonePts(a0),a1
  159. DARKPTS:
  160.  move.w (a1)+,d4
  161.  blt.s DARKall
  162.  move.w (a3,d4.w*4),d5
  163.  move.w 2(a3,d4.w*4),d6
  164.  sub.w d1,d5
  165.  bgt.s .okpos1
  166.  neg.w d5
  167. .okpos1
  168.  
  169.  sub.w d2,d6
  170.  bgt.s .okpos2
  171.  neg.w d6
  172. .okpos2
  173.  
  174.  add.w d5,d6
  175.  asr.w #5,d6
  176.  add.w d0,d6
  177.  ble.s DARKPTS
  178.  
  179.  add.w d6,(a2,d4.w*4)
  180.  add.w d6,2(a2,d4.w*4)
  181.  bra.s DARKPTS
  182.  
  183. DARKall:
  184.  
  185.  movem.l (a7)+,d0-d7/a0-a6
  186.  rts
  187.  
  188. Flash:
  189.  
  190. ; D0=number of a zone, D1=brightness change
  191.  
  192.  cmp.w #-20,d1
  193.  bgt.s .okflash
  194.  move.w #-20,d1
  195. .okflash:
  196.  
  197.  movem.l d0/a0/a1,-(a7)
  198.  
  199.  move.l #CurrentPointBrights,a1
  200.  
  201.  move.l ZoneAdds,a0
  202.  move.l (a0,d0.w*4),a0
  203.  add.l LEVELDATA,a0
  204.  
  205.  move.l a0,-(a7)
  206.  
  207.  add.w ToZonePts(a0),a0
  208. flashpts:
  209.  move.w (a0)+,d2
  210.  blt.s flashedall
  211.  add.w d1,(a1,d2.w*4)
  212.  add.w d1,2(a1,d2.w*4)
  213.  bra flashpts
  214.  
  215. flashedall:
  216.  move.l (a7)+,a0
  217.  
  218.  move.l #ZoneBrightTable,a1
  219.  add.w d1,(a1,d0.w*4)
  220.  add.w d1,2(a1,d0.w*4)
  221.  
  222.  add.l #ToListOfGraph,a0
  223.  
  224. doemall:
  225.  move.w (a0),d0
  226.  blt.s doneemall
  227.  add.w d1,(a1,d0.w*4)
  228.  add.w d1,2(a1,d0.w*4)
  229.  addq #8,a0
  230.  bra.s doemall
  231.  
  232. doneemall:
  233.  movem.l (a7)+,d0/a0/a1
  234.  
  235.  rts
  236.  
  237. prot2: dc.w 0
  238.  
  239. radius: dc.w 0
  240.  
  241. ExplodeIntoBits:
  242.  
  243.  move.w d3,radius
  244.  
  245.  cmp.w #7,d2
  246.  ble.s .oksplut
  247.  move.w #7,d2
  248. .oksplut:
  249.  
  250.  move.l NastyShotData,a5
  251.  move.w #19,d1
  252. .findeight
  253.  move.w 12(a5),d0
  254.  blt.s .gotonehere
  255.  adda.w #64,a5
  256.  dbra d1,.findeight
  257.  rts
  258.  
  259. .gotonehere
  260.  
  261.  move.b #0,damagetaken(a5)
  262.  move.b #0,numlives(a5)
  263.  
  264.  move.l ObjectPoints,a2
  265.  move.w (a5),d3
  266.  lea (a2,d3.w*8),a2
  267. ; jsr GetRand
  268. ; lsr.w #4,d0
  269. ; move.w radius,d1
  270. ; and.w d1,d0
  271. ; asr.w #1,d1
  272. ; sub.w d1,d0
  273.  move.w newx,d0
  274.  move.w d0,(a2)
  275. ; jsr GetRand
  276. ; lsr.w #4,d0
  277. ; move.w radius,d1
  278. ; and.w d1,d0
  279. ; asr.w #1,d1
  280. ; sub.w d1,d0
  281.  move.w newz,d0
  282.  move.w d0,4(a2)
  283.  
  284.  jsr GetRand
  285.  and.w #8190,d0
  286.  move.l #SineTable,a2
  287.  adda.w d0,a2
  288.  move.w (a2),d3
  289.  move.w 2048(a2),d4
  290.  Jsr GetRand
  291.  and.w #3,d0
  292.  add.w #1,d0
  293.  ext.l d3
  294.  ext.l d4
  295.  asl.l d0,d3
  296.  asl.l d0,d4
  297.  move.l ImpactX(a0),d0
  298.  swap d4
  299.  asr.w #1,d0
  300.  add.w d0,d4
  301.  swap d0
  302.  move.w d4,shotzvel(a5)
  303.  swap d3
  304.  asr.w #1,d0
  305.  add.w d0,d3
  306.  move.w d3,shotxvel(a5)
  307.  jsr GetRand
  308.  and.w #1023,d0
  309.  add.w #2*128,d0
  310.  neg.w d0
  311.  move.w d0,shotyvel(a5)
  312.  move.l #0,EnemyFlags(a5)
  313.  move.w 12(a0),12(a5)
  314.  
  315. ; jsr GetRand
  316. ; lsr.w #4,d0
  317. ; move.w radius,d1
  318. ; and.w d1,d0
  319. ; asr.w #1,d1
  320. ; sub.w d1,d0
  321.  move.w 4(a0),d0
  322.  add.w #6,d0
  323.  ext.l d0
  324.  asl.l #7,d0
  325.  
  326.  move.l d0,accypos(a5)
  327.  move.w d2,d0
  328.  and.w #3,d0
  329.  add.w #50,d0
  330.  move.b d0,shotsize(a5)
  331.  move.w #40,shotgrav(a5)
  332.  move.w #0,shotflags(a5)
  333.  move.w #-1,shotlife(a5)
  334.  move.b #2,16(a5)
  335.  clr.b shotstatus(a5)
  336.  move.b ObjInTop(a0),ObjInTop(a5)
  337.  st worry(a0)
  338.  adda.w #64,a5
  339.  sub.w #1,d2
  340.  blt.s .gotemall
  341.  dbra d1,.findeight
  342.  
  343. .gotemall
  344.  
  345.  rts
  346.  
  347. brightanim:
  348.  
  349.  move.l #BrightAnimTable,a1
  350.  move.l #BrightAnimPtrs,a3
  351.  move.l #BrightAnimStarts,a4
  352. dobrightanims
  353.  move.l (a3),d0
  354.  blt nomoreanims
  355.  move.l d0,a2
  356.  move.w (a2)+,d0
  357.  cmp.w #999,d0
  358.  bne.s itsabright
  359.  move.l (a4),a2
  360.  move.w (a2)+,d0
  361. itsabright:
  362.  move.l a2,(a3)+
  363.  addq #4,a4
  364.  move.w d0,(a1)+
  365.  bra.s dobrightanims
  366.  
  367. nomoreanims:
  368.  rts
  369.  
  370. BrightAnimTable: ds.w 20
  371. BrightAnimPtrs:
  372.  dc.l PulseANIM
  373.  dc.l FlickerANIM
  374.  dc.l FireFlickerANIM
  375.  dc.l -1
  376.  
  377. BrightAnimStarts:
  378.  dc.l PulseANIM
  379.  dc.l FlickerANIM
  380.  dc.l FireFlickerANIM
  381.  
  382. PulseANIM:
  383.  dc.w -10,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
  384.  dc.w 10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9
  385.  dc.w 999
  386.  
  387. FlickerANIM:
  388.  dcb.w 20,10
  389.  dc.w -10
  390.  dcb.w 30,10
  391.  dc.w -10
  392.  dcb.w 5,10
  393.  dc.w -10
  394.  dc.w 999
  395.  
  396. FireFlickerANIM:
  397.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  398.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  399.  dc.w -5,-5
  400.  dc.w 999
  401.  
  402. realtab:
  403.  dc.l prot1-78935450
  404.  dc.l prot2-78935450
  405.  dc.l prot3-78935450
  406.  dc.l prot4-78935450
  407.  dc.l prot5-78935450
  408.  dc.l prot6-78935450
  409.  dc.l prot7-78935450
  410.  dc.l prot8-78935450
  411.  dc.l prot9-78935450
  412.  dc.l protA-78935450
  413.  
  414. objvels: ds.l 8
  415.  
  416. FramesToDraw: dc.w 0
  417. TempFrames: dc.w 0
  418.  
  419. objmoveanim:
  420.  
  421.  move.l PLR1_Roompt,a0
  422.  move.w (a0),PLR1_Zone
  423.  move.l PLR2_Roompt,a0
  424.  move.w (a0),PLR2_Zone
  425.  
  426.  move.w #0,PLAYERNOISEVOL
  427.  
  428.  bsr Player1Shot
  429.  bsr Player2Shot
  430.  bsr SwitchRoutine
  431.  bsr DoorRoutine
  432.  bsr LiftRoutine
  433.  bsr ObjectHandler
  434.  bsr brightanim
  435.  
  436.  subq.w #1,animtimer
  437.  bgt.s notzero
  438.  move.w #2,animtimer
  439.  move.l otherrip,d0
  440.  move.l RipTear,otherrip
  441.  move.l d0,RipTear
  442. notzero:
  443.  
  444.  rts
  445.  
  446. ******************************
  447.  
  448. tstdir: dc.w 0
  449.  
  450. liftheighttab: ds.w 40
  451. doorheighttab: ds.w 40
  452. PLR1_stoodonlift: dc.b 0
  453. PLR2_stoodonlift: dc.b 0
  454. liftattop: dc.b 0
  455. liftatbot: dc.b 0
  456. ZoneBrightTable:
  457.  ds.l 300
  458.  
  459. DoWaterAnims:
  460.  
  461.  move.w #20,d0
  462. wateranimlop:
  463.  move.l (a0)+,d1
  464.  move.l (a0)+,d2
  465.  move.l (a0),d3
  466.  move.w 4(a0),d4
  467.  move.w d4,d5
  468.  muls TempFrames,d5
  469.  add.l d5,d3
  470.  cmp.l d1,d3
  471.  bgt.s waternotattop
  472.  
  473.  move.l d1,d3
  474.  move.w #128,d4
  475.  bra waterdone
  476.  
  477. waternotattop:
  478.  
  479.  cmp.l d2,d3
  480.  blt.s waterdone
  481.  
  482.  move.l d2,d3
  483.  move.w #-128,d4
  484.  
  485. waterdone:
  486.  
  487.  move.l d3,(a0)+
  488.  move.w d4,(a0)+
  489.  move.l d3,d1
  490. morezones:
  491.  move.w (a0)+,d2
  492.  bge.s okzone
  493.  
  494.  
  495.  dbra d0,wateranimlop
  496.  rts
  497.  
  498. okzone:
  499.  
  500.  move.l (a0)+,a1
  501.  add.l LEVELGRAPHICS,a1
  502.  move.l d1,d3
  503.  asr.l #6,d3
  504.  move.w d3,2(a1)
  505.  move.l ZoneAdds,a1
  506.  move.l (a1,d2.w*4),a1
  507.  add.l LEVELDATA,a1
  508.  move.l d1,ToZoneWater(a1)
  509.  
  510.  bra.s morezones
  511.  
  512.  rts
  513.  
  514.  even
  515. LiftRoutine:
  516.  
  517.  move.l LiftData,a0
  518.  move.l #liftheighttab,a6
  519.  
  520. doalift:
  521.  
  522.  move.w (a0)+,d0    ; bottom of lift movement
  523.  cmp.w #999,d0
  524.  bne notallliftsdone
  525.  move.w #999,(a6)
  526.  
  527.  bsr DoWaterAnims
  528.  
  529.  rts
  530.  
  531. notallliftsdone:
  532.  move.w (a0)+,d1    ; top of lift movement.
  533.  
  534.  move.w (a0),d3
  535.  move.w d3,(a6)+
  536.  move.w 2(a0),d2
  537.  move.w d2,d7
  538.  muls TempFrames,d2
  539.  add.w d2,d3
  540.  move.w 2(a0),d2
  541.  cmp.w d3,d0
  542.  sle.s liftatbot
  543.  bgt.s .nolower
  544.  moveq #0,d2
  545.  move.w d0,d3
  546. .nolower:
  547.  
  548.  cmp.w d3,d1
  549.  sge.s liftattop
  550.  blt.s .noraise
  551.  moveq #0,d2
  552.  move.w d1,d3
  553. .noraise:
  554.  
  555.  sub.w d3,d0
  556.  cmp.w #15*16,d0
  557.  slt d6
  558.  
  559.  move.w d3,(a0)+
  560.  move.l a0,a5
  561.  move.w d2,(a0)+
  562.  move.w d2,d7
  563.  
  564.  move.l (a0)+,a1
  565.  add.l LEVELGRAPHICS,a1
  566.  asr.w #2,d3
  567.  move.w d3,d0
  568.  asl.w #2,d0
  569.  move.w d0,2(a1)
  570.  move.w d3,d0
  571.  muls #256,d3
  572.  move.w (a0)+,d5
  573.  move.l ZoneAdds,a1
  574.  move.l (a1,d5.w*4),a1
  575.  add.l LEVELDATA,a1
  576.  move.w (a1),d5
  577.  move.l PLR1_Roompt,a3
  578.  move.l d3,2(a1)
  579.  neg.w d0
  580.  
  581.  cmp.w (a3),d5
  582.  seq.s PLR1_stoodonlift
  583.  move.l PLR2_Roompt,a3
  584.  cmp.w (a3),d5
  585.  seq.s PLR2_stoodonlift
  586.  
  587.  move.w (a0)+,d2    ; conditions
  588.  and.w Conditions,d2
  589.  cmp.w -2(a0),d2
  590.  beq.s .satisfied 
  591.  
  592.  move.w (a0)+,d5
  593.  
  594. .dothesimplething:
  595.  move.l FloorLines,a3
  596. .simplecheck:
  597.  move.w (a0)+,d5
  598.  blt nomoreliftwalls
  599.  asl.w #4,d5
  600.  lea (a3,d5.w),a4
  601.  move.w #0,14(a4)
  602.  move.l (a0)+,a1
  603.  add.l LEVELGRAPHICS,a1
  604.  move.l (a0)+,a2
  605.  adda.w d0,a2
  606.  move.l a2,10(a1)
  607.  move.l d3,20(a1)
  608.  bra.s .simplecheck
  609.  bra nomoreliftwalls 
  610.  
  611. .satisfied:
  612.  
  613.  move.l FloorLines,a3
  614.  moveq #0,d4
  615.  moveq #0,d5
  616.  move.b (a0)+,d4
  617.  move.b (a0)+,d5
  618.  tst.b liftattop
  619.  bne tstliftlower
  620.  tst.b liftatbot
  621.  bne tstliftraise
  622.  move.w #0,d1
  623.  
  624. backfromlift
  625.  
  626.  and.w #255,d0
  627.  
  628. liftwalls:
  629.  move.w (a0)+,d5
  630.  blt nomoreliftwalls
  631.  
  632.  asl.w #4,d5
  633.  lea (a3,d5.w),a4
  634.  move.w 14(a4),d4
  635.  move.w #$8000,14(a4)
  636.  and.w d1,d4
  637.  beq.s .nothinghit
  638.  move.w d7,(a5)
  639.  move.w #0,Noisex
  640.  move.w #0,Noisez
  641.  move.w #50,Noisevol
  642.  move.w #5,Samplenum
  643.  move.b #1,chanpick
  644.  st notifplaying
  645.  move.b #$fe,IDNUM
  646.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  647.  jsr MakeSomeNoise
  648.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  649. .nothinghit:
  650.  move.l (a0)+,a1
  651.  add.l LEVELGRAPHICS,a1
  652.  move.l (a0)+,a2
  653.  adda.w d0,a2
  654.  move.l a2,10(a1)
  655.  move.l d3,20(a1)
  656.  bra liftwalls
  657.  
  658. nomoreliftwalls 
  659.  bra doalift
  660.  
  661.  rts
  662.  
  663. tstliftlower:
  664.  cmp.b #1,d5
  665.  blt.s lift0
  666.  beq.s lift1
  667.  cmp.b #3,d5
  668.  blt.s lift2
  669.  beq.s lift3
  670.  
  671. lift0:
  672.  
  673.  moveq #0,d1
  674.  tst.b p1_spctap
  675.  beq.s .noplr1
  676.  move.w #%100000000,d1
  677.  move.w #4,d7
  678.  tst.b PLR1_stoodonlift
  679.  beq.s .noplr1
  680.  move.w #$8000,d1
  681.  bra backfromlift
  682.  
  683. .noplr1:
  684.  tst.b p2_spctap
  685.  beq.s .noplr2
  686.  or.w #%100000000000,d1
  687.  move.w #4,d7
  688.  tst.b PLR2_stoodonlift
  689.  beq.s .noplr2
  690.  move.w #$8000,d1
  691.  bra backfromlift
  692.  
  693. .noplr2:
  694.  bra backfromlift
  695.  
  696. lift1:
  697.  move.w #4,d7
  698.  tst.b PLR1_stoodonlift
  699.  bne.s lift1b
  700.  tst.b PLR2_stoodonlift
  701.  bne.s lift1b
  702.  move.w #%100100000000,d1
  703.  bra backfromlift
  704. lift1b:
  705.  move.w #$8000,d1
  706.  bra backfromlift
  707.  
  708. lift2:
  709.  move.w #$8000,d1
  710.  move.w #4,d7
  711.  bra backfromlift
  712.  
  713. lift3:
  714.  move.w #$0,d1
  715.  bra backfromlift
  716.  
  717. tstliftraise:
  718.  cmp.b #1,d4
  719.  blt.s rlift0
  720.  beq.s rlift1
  721.  cmp.b #3,d4
  722.  blt.s rlift2
  723.  beq.s rlift3
  724.  
  725. rlift0:
  726.  
  727.  moveq #0,d1
  728.  tst.b p1_spctap
  729.  beq.s .noplr1
  730.  move.w #%100000000,d1
  731.  move.w #-4,d7
  732.  tst.b PLR1_stoodonlift
  733.  beq.s .noplr1
  734.  move.w #$8000,d1
  735.  bra backfromlift
  736.  
  737. .noplr1:
  738.  tst.b p2_spctap
  739.  beq.s .noplr2
  740.  or.w #%100000000000,d1
  741.  move.w #-4,d7
  742.  tst.b PLR2_stoodonlift
  743.  beq.s .noplr2
  744.  move.w #$8000,d1
  745.  bra backfromlift
  746.  
  747. .noplr2:
  748.  
  749.  bra backfromlift
  750.  
  751. rlift1:
  752.  move.w #-4,d7
  753.  tst.b PLR1_stoodonlift
  754.  bne.s rlift1b
  755.  tst.b PLR2_stoodonlift
  756.  bne.s rlift1b
  757.  move.w #%100100000000,d1
  758.  bra backfromlift
  759. rlift1b:
  760.  move.w #$8000,d1
  761.  bra backfromlift
  762.  
  763. rlift2:
  764.  move.w #$8000,d1
  765.  move.w #-4,d7
  766.  bra backfromlift
  767.  
  768. rlift3:
  769.  move.w #$0,d1
  770.  bra backfromlift
  771.  
  772.  
  773. animtimer: dc.w 2
  774.  
  775.  
  776. doordir: dc.w -1
  777. doorpos: dc.w -9
  778. dooropen: dc.b 0
  779. doorclosed: dc.b 0 
  780.  
  781.  even 
  782. DoorRoutine:
  783.  
  784.  move.l #doorheighttab,a6
  785.  move.l DoorData,a0
  786.  
  787. doadoor:
  788.  
  789.  move.w (a0)+,d0    ; bottom of door movement
  790.  cmp.w #999,d0
  791.  bne notalldoorsdone
  792.  move.w #999,(a6)+
  793.  rts
  794. notalldoorsdone:
  795.  move.w (a0)+,d1    ; top of door movement.
  796.  
  797.  move.w (a0),d3
  798.  move.w d3,(a6)+
  799.  move.w 2(a0),d2
  800.  muls TempFrames,d2
  801.  add.w d2,d3
  802.  move.w 2(a0),d2
  803.  cmp.w d3,d0
  804.  sle.s doorclosed
  805.  bgt.s nolower
  806.  moveq #0,d2
  807. nolower:
  808.  
  809.  cmp.w d3,d1
  810.  sge.s dooropen
  811.  blt.s noraise
  812.  moveq #0,d2
  813.  move.w d1,d3
  814. noraise:
  815.  
  816.  sub.w d3,d0
  817.  cmp.w #15*16,d0
  818.  sge d6
  819.  
  820.  move.w d3,(a0)+
  821.  move.l a0,a5
  822.  move.w d2,(a0)+
  823.  move.w d2,d7
  824.  
  825.  move.l (a0)+,a1
  826.  add.l LEVELGRAPHICS,a1
  827.  asr.w #2,d3
  828.  move.w d3,d0
  829.  asl.w #2,d0
  830.  move.w d0,2(a1)
  831.  move.w d3,d0
  832.  muls #256,d3
  833.  move.l ZoneAdds,a1
  834.  move.w (a0)+,d5
  835.  
  836.  
  837.  move.l (a1,d5.w*4),a1
  838.  add.l LEVELDATA,a1
  839.  move.l d3,6(a1)
  840.  neg.w d0
  841.  and.w #255,d0
  842. ; add.w #64,d0
  843.  
  844.  cmp.w PLR1_Zone,d5
  845.  bne.s NotGoBackUp
  846.  tst.b dooropen
  847.  bne.s NotGoBackUp
  848.  tst.w d2
  849.  blt.s NotGoBackUp
  850.  move.w #-16,d7
  851.  move.w #$8000,d1
  852.  move.w (a0)+,d2
  853.  move.w (a0)+,d5
  854.  bra backfromtst
  855. NotGoBackUp:
  856.  
  857.  move.w (a0)+,d2    ; conditions
  858.  and.w Conditions,d2
  859.  
  860.  cmp.w -2(a0),d2
  861.  beq.s satisfied 
  862.  
  863.  move.w (a0)+,d5
  864.  
  865. dothesimplething:
  866.  move.l FloorLines,a3
  867. simplecheck:
  868.  move.w (a0)+,d5
  869.  blt nomoredoorwalls
  870.  asl.w #4,d5
  871.  lea (a3,d5.w),a4
  872.  move.w #0,14(a4)
  873.  move.l (a0)+,a1
  874.  add.l LEVELGRAPHICS,a1
  875.  move.l (a0)+,a2
  876.  adda.w d0,a2
  877.  move.l a2,10(a1)
  878.  move.l d3,24(a1)
  879.  bra.s simplecheck
  880.  bra nomoredoorwalls 
  881.  
  882.  
  883. satisfied:
  884.  
  885.  moveq #0,d4
  886.  moveq #0,d5
  887.  move.b (a0)+,d5
  888.  move.b (a0)+,d4
  889.  tst.b dooropen
  890.  bne tstdoortoclose
  891.  tst.b doorclosed
  892.  bne tstdoortoopen
  893.  move.w #$0,d1
  894.  
  895. backfromtst:
  896.  
  897.  move.l FloorLines,a3
  898.  
  899. doorwalls:
  900.  move.w (a0)+,d5
  901.  blt.s nomoredoorwalls
  902.  asl.w #4,d5
  903.  lea (a3,d5.w),a4
  904.  move.w 14(a4),d4
  905.  move.w #$8000,14(a4)
  906.  and.w d1,d4
  907.  beq.s nothinghit
  908.  move.w d7,(a5)
  909.  move.w #0,Noisex
  910.  move.w #0,Noisez
  911.  move.w #50,Noisevol
  912.  move.w #5,Samplenum
  913.  move.b #1,chanpick
  914.  clr.b notifplaying
  915.  move.b #$fd,IDNUM
  916.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  917.  jsr MakeSomeNoise
  918.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  919. nothinghit:
  920.  move.l (a0)+,a1
  921.  add.l LEVELGRAPHICS,a1
  922.  move.l (a0)+,a2
  923.  adda.w d0,a2
  924.  move.l a2,10(a1)
  925.  move.l d3,24(a1)
  926.  bra.s doorwalls
  927.  
  928. nomoredoorwalls 
  929.  bra doadoor
  930.  
  931.  rts
  932.  
  933. tstdoortoopen:
  934.  cmp.w #1,d5
  935.  blt.s door0
  936.  beq.s door1
  937.  cmp.w #3,d5
  938.  blt.s door2
  939.  beq.s door3
  940.  cmp.w #5,d5
  941.  blt.s door4
  942.  beq.s door5
  943.  
  944. door0:
  945.  
  946.  move.w #$0,d1
  947.  tst.b p1_spctap
  948.  beq.s .noplr1
  949.  move.w #%100000000,d1
  950. .noplr1:
  951.  tst.b p2_spctap
  952.  beq.s .noplr2
  953.  or.w #%100000000000,d1
  954. .noplr2:
  955.  move.w #-16,d7
  956.  bra backfromtst
  957.  
  958. door1:
  959.  move.w #%100100000000,d1
  960.  move.w #-16,d7
  961.  bra backfromtst
  962.  
  963. door2:
  964.  move.w #%10000000000,d1
  965.  move.w #-16,d7
  966.  bra backfromtst
  967.  
  968. door3:
  969.  move.w #%1000000000,d1
  970.  move.w #-16,d7
  971.  bra backfromtst
  972.  
  973. door4:
  974.  move.w #$8000,d1
  975.  move.w #-16,d7
  976.  bra backfromtst
  977.  
  978. door5:
  979.  move.w #$0,d1
  980.  bra backfromtst
  981.  
  982. tstdoortoclose:
  983.  tst.w d4
  984.  beq.s dclose0
  985.  bra.s dclose1
  986.  
  987. dclose0:
  988.  move.w #4,d7
  989.  move.w #$8000,d1
  990.  bra backfromtst
  991.  
  992. dclose1:
  993.  move.w #$0,d1
  994.  bra backfromtst
  995.  
  996. SwitchRoutine:
  997.  
  998.  move.l SwitchData,a0
  999.  move.w #7,d0
  1000.  move.l Points,a1
  1001. CheckSwitches
  1002.  
  1003.  tst.b p1_spctap
  1004.  bne p1_SpaceIsPressed
  1005. backtop2
  1006.  tst.b p2_spctap
  1007.  bne p2_SpaceIsPressed
  1008. backtoend
  1009.  
  1010.  tst.b 2(a0)
  1011.  beq nobutt
  1012.  
  1013.  tst.b 10(a0)
  1014.  beq nobutt
  1015.  
  1016.  move.w TempFrames,d1
  1017.  add.w d1,d1
  1018.  add.w d1,d1
  1019.  sub.b d1,3(a0)
  1020.  bne nobutt
  1021.  
  1022.  move.b #0,10(a0)
  1023.  move.l 6(a0),a3
  1024.  add.l LEVELGRAPHICS,a3
  1025.  move.w #11,4(a3)
  1026.  move.w (a3),d3
  1027.  and.w #%00000111100,d3
  1028.  move.w d3,(a3)
  1029.  move.w #7,d3
  1030.  sub.w d0,d3
  1031.  addq #4,d3
  1032.  move.w Conditions,d4
  1033.  bclr d3,d4
  1034.  move.w d4,Conditions
  1035.  move.w #0,Noisex
  1036.  move.w #0,Noisez
  1037.  move.w #50,Noisevol
  1038.  move.w #10,Samplenum
  1039.  move.b #1,chanpick
  1040.  st notifplaying
  1041.  move.b #$fc,IDNUM
  1042.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1043.  jsr MakeSomeNoise
  1044.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1045.  
  1046. nobutt:
  1047.  
  1048.  adda.w #14,a0
  1049.  dbra d0,CheckSwitches
  1050.  rts
  1051.  
  1052. p1_SpaceIsPressed:
  1053.  move.w p1_xoff,d1
  1054.  move.w p1_zoff,d2
  1055.  move.w (a0),d3
  1056.  blt .NotCloseEnough
  1057.  move.w 4(a0),d3
  1058.  lea (a1,d3.w*4),a2
  1059.  move.w (a2),d3
  1060.  add.w 4(a2),d3
  1061.  asr.w #1,d3
  1062.  move.w 2(a2),d4
  1063.  add.w 6(a2),d4
  1064.  asr.w #1,d4
  1065.  sub.w d1,d3
  1066.  muls d3,d3
  1067.  sub.w d2,d4
  1068.  muls d4,d4
  1069.  add.l d3,d4
  1070.  cmp.l #60*60,d4
  1071.  bge .NotCloseEnough
  1072.  move.l 6(a0),a3
  1073.  add.l LEVELGRAPHICS,a3
  1074.  move.w #11,4(a3)
  1075.  move.w (a3),d3
  1076.  and.w #%00000111100,d3
  1077.  not.b 10(a0)
  1078.  beq.s .switchoff
  1079.  or.w #2,d3
  1080. .switchoff: 
  1081.  move.w d3,(a3)
  1082.  move.w #7,d3
  1083.  sub.w d0,d3
  1084.  addq #4,d3
  1085.  move.w Conditions,d4
  1086.  bchg d3,d4
  1087.  move.w d4,Conditions
  1088.  move.b #0,3(a0)
  1089.  move.w #0,Noisex
  1090.  move.w #0,Noisez
  1091.  move.w #50,Noisevol
  1092.  move.w #10,Samplenum
  1093.  move.b #1,chanpick
  1094.  st notifplaying
  1095.  move.b #$fc,IDNUM
  1096.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1097.  jsr MakeSomeNoise
  1098.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1099.  
  1100. .NotCloseEnough:
  1101.  bra backtop2
  1102.  
  1103. p2_SpaceIsPressed:
  1104.  move.w p2_xoff,d1
  1105.  move.w p2_zoff,d2
  1106.  move.w (a0),d3
  1107.  blt .NotCloseEnough
  1108.  move.w 4(a0),d3
  1109.  lea (a1,d3.w*4),a2
  1110.  move.w (a2),d3
  1111.  add.w 4(a2),d3
  1112.  asr.w #1,d3
  1113.  move.w 2(a2),d4
  1114.  add.w 6(a2),d4
  1115.  asr.w #1,d4
  1116.  sub.w d1,d3
  1117.  muls d3,d3
  1118.  sub.w d2,d4
  1119.  muls d4,d4
  1120.  add.l d3,d4
  1121.  cmp.l #60*60,d4
  1122.  bge .NotCloseEnough
  1123.  move.l 6(a0),a3
  1124.  add.l LEVELGRAPHICS,a3
  1125.  move.w #11,4(a3)
  1126.  move.w (a3),d3
  1127.  and.w #%00000111100,d3
  1128.  not.b 10(a0)
  1129.  beq.s .switchoff
  1130.  or.w #2,d3
  1131. .switchoff: 
  1132.  move.w d3,(a3)
  1133.  move.w #7,d3
  1134.  sub.w d0,d3
  1135.  addq #4,d3
  1136.  move.w Conditions,d4
  1137.  bchg d3,d4
  1138.  move.w d4,Conditions
  1139.  movem.l a0/a1/d0,-(a7)
  1140.  move.w #0,Noisex
  1141.  move.w #0,Noisez
  1142.  move.w #50,Noisevol
  1143.  move.w #10,Samplenum
  1144.  move.b #1,chanpick
  1145.  st notifplaying
  1146.  move.b #$fc,IDNUM
  1147.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  1148.  jsr MakeSomeNoise
  1149.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  1150.  
  1151.  movem.l (a7)+,a0/a1/d0
  1152.  
  1153. .NotCloseEnough:
  1154.  bra backtoend
  1155.  
  1156. prot1: dc.w 0
  1157.   
  1158. tempGotBigGun: dc.w 0 
  1159. tempGunDamage: dc.w 0
  1160. tempGunNoise: dc.w 1
  1161. tempxoff: dc.w 0
  1162. tempzoff: dc.w 0
  1163. tempRoompt: dc.l 0
  1164.  
  1165. PLR1_GotBigGun: dc.w 0
  1166. PLR1_GunDamage: dc.w 0
  1167. PLR1_GunNoise: dc.w 0
  1168. PLR2_GotBigGun: dc.w 0
  1169. PLR2_GunDamage: dc.w 0
  1170. PLR2_GunNoise: dc.w 0
  1171. bulyspd: dc.w 0 
  1172. closedist: dc.w 0
  1173.  
  1174. PLR1_ObsInLine:
  1175.  ds.b 400 
  1176. PLR2_ObsInLine:
  1177.  ds.b 400 
  1178.  
  1179. rotcount:
  1180.  dc.w 0
  1181.  
  1182. shotvels: ds.l 20
  1183.  
  1184.  include "PLAYERSHOOT.s"
  1185.  
  1186. PLR1_GunFrame: dc.w 0
  1187. PLR2_GunFrame: dc.w 0
  1188.  
  1189. duh: dc.w 0
  1190. double: dc.w 0
  1191. ivescreamed: dc.w 0
  1192.  
  1193. ObjectHandler:
  1194.  
  1195.  move.l ObjectData,a0
  1196. Objectloop:
  1197.  tst.w (a0)
  1198.  blt doneallobj
  1199.  move.w 12(a0),GraphicRoom(a0)
  1200.  tst.b worry(a0)
  1201.  beq dontworryyourprettyhead
  1202.  
  1203.  move.b 16(a0),d0
  1204.  blt.s doneobj
  1205.  beq JUMPNASTY
  1206.  cmp.b #2,d0
  1207.  blt JUMPMEDI
  1208.  beq JUMPBULLET
  1209.  cmp.b #4,d0
  1210.  blt JUMPGUN
  1211.  beq JUMPKEY
  1212.  cmp.b #6,d0
  1213.  blt doneobj
  1214.  beq JUMPROBOT
  1215.  cmp.b #8,d0
  1216.  blt doneobj
  1217.  beq JUMPFLYINGNASTY
  1218.  cmp.b #10,d0
  1219.  blt JUMPAMMO
  1220.  beq JUMPBARREL
  1221.  cmp.b #12,d0
  1222.  blt doneobj
  1223.  beq JUMPMARINE
  1224.  cmp.b #14,d0
  1225.  blt JUMPWORM
  1226.  beq JUMPWELLHARD
  1227.  cmp.b #16,d0
  1228.  beq JUMPTREE
  1229.  cmp.b #18,d0
  1230.  blt JUMPEYEBALL
  1231.  beq JUMPTOUGHMARINE
  1232.  cmp.b #20,d0
  1233.  blt JUMPFLAMEMARINE
  1234.  beq JUMPGASPIPE
  1235.  
  1236. doneobj:
  1237.  
  1238. dontworryyourprettyhead:
  1239.  adda.w #64,a0
  1240.  bra Objectloop
  1241.  
  1242. doneallobj:
  1243.  rts
  1244.  
  1245. JUMPNASTY: 
  1246.  jsr ItsANasty
  1247.  bra doneobj
  1248. JUMPMEDI:
  1249.  jsr ItsAMediKit
  1250.  bra doneobj
  1251. JUMPBULLET
  1252.  jsr ItsABullet
  1253.  bra doneobj
  1254. JUMPGUN
  1255.  jsr ItsABigGun
  1256.  bra doneobj
  1257. JUMPKEY
  1258.  jsr ItsAKey
  1259.  bra doneobj
  1260.  
  1261. ; FIVE IS PLAYER 1
  1262. JUMPROBOT
  1263.  jsr ItsARobot
  1264.  bra doneobj
  1265.  
  1266.  jsr ItsABigNasty
  1267.  bra doneobj
  1268.  
  1269. JUMPFLYINGNASTY
  1270.  jsr ItsAFlyingNasty
  1271.  bra doneobj
  1272. JUMPAMMO
  1273.  jsr ItsAnAmmoClip
  1274.  bra doneobj
  1275. JUMPBARREL
  1276.  jsr ItsABarrel
  1277.  bra doneobj
  1278.  
  1279. ; ELEVEN IS PLAYER 2
  1280.  
  1281. JUMPMARINE
  1282.  jsr ItsAMutantMarine
  1283.  bra doneobj
  1284. JUMPWORM
  1285.  jsr ItsAHalfWorm
  1286.  bra doneobj
  1287. JUMPWELLHARD
  1288.  jsr ItsABigRedThing
  1289.  bra doneobj
  1290. JUMPTREE:
  1291.  jsr ItsATree
  1292.  bra doneobj
  1293. JUMPEYEBALL
  1294.  jsr ItsAEyeBall
  1295.  bra doneobj
  1296. JUMPTOUGHMARINE:
  1297.  jsr ItsAToughMarine
  1298.  bra doneobj
  1299. JUMPFLAMEMARINE:
  1300.  jsr ItsAFlameMarine
  1301.  bra doneobj
  1302. JUMPGASPIPE:
  1303.  jsr ItsAGasPipe
  1304.  bra doneobj
  1305.  
  1306.  
  1307. ItsAGasPipe:
  1308.  
  1309.  clr.b worry(a0)
  1310.  
  1311.  move.w TempFrames,d0
  1312.  tst.w ThirdTimer(a0)
  1313.  ble.s maybeflame
  1314.  
  1315.  sub.w d0,ThirdTimer(a0)
  1316.  move.w #5,SecTimer(a0)
  1317.  move.w #10,FourthTimer(a0)
  1318.  rts
  1319.  
  1320. maybeflame:
  1321.  
  1322.  sub.w d0,FourthTimer(a0)
  1323.  blt.s yesflame
  1324.  rts
  1325.  
  1326. yesflame:
  1327.  move.w #10,FourthTimer(a0)
  1328.  sub.w #1,SecTimer(a0)
  1329.  bgt.s notdoneflame
  1330.  
  1331.  move.w ObjTimer(a0),ThirdTimer(a0)
  1332.  
  1333. notdoneflame:
  1334.  
  1335.  cmp.w #4,SecTimer(a0)
  1336.  bne.s .nowhoosh
  1337.  
  1338.  movem.l d0-d7/a0-a6,-(a7)
  1339.  move.l #ObjRotated,a1
  1340.  move.w (a0),d0
  1341.  lea (a1,d0.w*8),a1
  1342.  move.l (a1),Noisex
  1343.  move.w #200,Noisevol
  1344.  move.w #22,Samplenum
  1345.  move.b #1,chanpick
  1346.  clr.b notifplaying
  1347.  move.b 1(a0),IDNUM
  1348.  jsr MakeSomeNoise
  1349.  movem.l (a7)+,d0-d7/a0-a6
  1350.  
  1351. .nowhoosh:
  1352.  
  1353. ; Gas pipe: facing direction is given by
  1354. ; leved (perpendicular to wall) so
  1355. ; just continuously spray out flame!
  1356.  move.l NastyShotData,a5
  1357.  move.w #19,d1
  1358. .findonefree
  1359.  move.w 12(a5),d0
  1360.  blt.s .foundonefree
  1361.  adda.w #64,a5
  1362.  dbra d1,.findonefree
  1363.  
  1364.  rts
  1365.  
  1366. .foundonefree:
  1367.  
  1368.  move.b #2,16(a5)
  1369.  move.w 12(a0),12(a5)
  1370.  move.w 4(a0),d0
  1371.  sub.w #80,d0
  1372.  move.w d0,4(a5)
  1373.  ext.l d0
  1374.  asl.l #7,d0
  1375.  move.l d0,accypos(a5)
  1376.  clr.b shotstatus(a5)
  1377.  move.w #0,shotyvel(a5)
  1378.  move.w (a0),d0
  1379.  move.w (a5),d1
  1380.  move.l ObjectPoints,a1
  1381.  move.l (a1,d0.w*8),(a1,d1.w*8)
  1382.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  1383.  move.b #3,shotsize(a5)
  1384.  move.w #0,shotflags(a5)
  1385.  move.w #0,shotgrav(a5)
  1386.  move.b #7,shotpower(a5)
  1387.  move.l #%100000100000,EnemyFlags(a5)
  1388.  move.w #0,shotanim(a5)
  1389.  move.w #0,shotlife(a5)
  1390.  move.l #SineTable,a1
  1391.  move.w Facing(a0),d0
  1392.  move.w (a1,d0.w),d1
  1393.  adda.w #2048,a1
  1394.  move.w (a1,d0.w),d2
  1395.  ext.l d1
  1396.  ext.l d2
  1397.  asl.l #4,d1
  1398.  asl.l #4,d2
  1399.  swap d1
  1400.  swap d2
  1401.  move.w d1,shotxvel(a5)
  1402.  move.w d2,shotzvel(a5)
  1403.  st worry(a5)
  1404.  
  1405.  rts
  1406.  
  1407. ; include "ab3:source/AI.s"
  1408.  
  1409. ItsABarrel:
  1410.  
  1411.  clr.b worry(a0)
  1412.  move.w 12(a0),GraphicRoom(a0)
  1413.  
  1414.  cmp.w #8,8(a0)
  1415.  bne.s notexploding
  1416.  
  1417.  add.w #$404,6(a0)
  1418.  
  1419.  move.w 10(a0),d0
  1420.  add.w #1,d0
  1421.  cmp.w #8,d0
  1422.  bne.s .notdone
  1423.  
  1424.  move.w #-1,12(a0)
  1425.  move.w #-1,GraphicRoom(a0)
  1426.  rts
  1427.  
  1428. .notdone:
  1429.  move.w d0,10(a0)
  1430.  rts
  1431.  
  1432. notexploding:
  1433.  
  1434.  move.w #$1f1f,14(a0)
  1435.  
  1436.  move.w 12(a0),d0
  1437.  move.l ZoneAdds,a1
  1438.  move.l (a1,d0.w*4),a1
  1439.  add.l LEVELDATA,a1
  1440.  move.l ToZoneFloor(a1),d0
  1441.  tst.b ObjInTop(a0)
  1442.  beq.s .okinbot
  1443.  move.l ToUpperFloor(a1),d0
  1444. .okinbot:
  1445.  asr.l #7,d0
  1446.  sub.w #60,d0
  1447.  move.w d0,4(a0)
  1448.  
  1449.  moveq #0,d2
  1450.  move.b damagetaken(a0),d2
  1451.  beq.s nodamage
  1452.  move.b #0,damagetaken(a0)
  1453.  sub.b d2,numlives(a0)
  1454.  bgt.s nodamage
  1455.  move.b #0,numlives(a0)
  1456.  
  1457.  movem.l d0-d7/a0-a6,-(a7)
  1458.  
  1459.  move.w (a0),d0
  1460.  move.l ObjectPoints,a1
  1461.  move.w (a1,d0.w*8),Viewerx
  1462.  move.w 4(a1,d0.w*8),Viewerz
  1463.  move.w #40,d0
  1464.  jsr ComputeBlast
  1465.  
  1466.  move.w (a0),d0
  1467.  move.l #ObjRotated,a1
  1468.  move.l (a1,d0.w*8),Noisex
  1469.  move.w #300,Noisevol
  1470.  move.w #15,Samplenum
  1471.  jsr MakeSomeNoise
  1472.  
  1473.  movem.l (a7)+,d0-d7/a0-a6
  1474.  move.w #8,8(a0)
  1475.  move.w #0,10(a0)
  1476.  move.w #$2020,14(a0)
  1477.  move.w #-30,2(a0)
  1478.  
  1479.  rts
  1480.  
  1481. nodamage:
  1482.  
  1483.  move.w (a0),d0
  1484.  move.l ObjectPoints,a1
  1485.  move.w (a1,d0.w*8),Viewerx
  1486.  move.w 4(a1,d0.w*8),Viewerz
  1487.  move.b ObjInTop(a0),ViewerTop
  1488.  move.b PLR1_StoodInTop,TargetTop
  1489.  move.l PLR1_Roompt,ToRoom
  1490.  
  1491.  move.w 12(a0),d0
  1492.  move.l ZoneAdds,a1
  1493.  move.l (a1,d0.w*4),a1
  1494.  add.l LEVELDATA,a1
  1495.  move.l a1,FromRoom
  1496.   
  1497.  move.w PLR1_xoff,Targetx
  1498.  move.w PLR1_zoff,Targetz
  1499.  move.l PLR1_yoff,d0
  1500.  asr.l #7,d0
  1501.  move.w d0,Targety
  1502.  move.w 4(a0),Viewery
  1503.  jsr CanItBeSeen
  1504.  
  1505.  clr.b 17(a0)
  1506.  tst.b CanSee
  1507.  beq .noseeplr1
  1508.  move.b #1,17(a0)
  1509.  
  1510. .noseeplr1:
  1511.  
  1512.  move.b PLR2_StoodInTop,TargetTop
  1513.  move.l PLR2_Roompt,ToRoom
  1514.  move.w PLR2_xoff,Targetx
  1515.  move.w PLR2_zoff,Targetz
  1516.  move.l PLR2_yoff,d0
  1517.  asr.l #7,d0
  1518.  move.w d0,Targety
  1519.  move.w 4(a0),Viewery
  1520.  jsr CanItBeSeen
  1521.  
  1522.  tst.b CanSee
  1523.  beq .noseeplr2
  1524.  or.b #2,17(a0)
  1525.  
  1526. .noseeplr2:
  1527.  
  1528.  
  1529.  rts
  1530.  
  1531.  include "ab3:source_4000/aliencontrol.s"
  1532.  
  1533. nextCPt: dc.w 0
  1534.  
  1535. RipTear: dc.l 256*17*65536
  1536. otherrip: dc.l 256*18*65536
  1537.  
  1538. ItsAMediKit:
  1539.  
  1540.  clr.b worry(a0)
  1541.  move.w 12(a0),GraphicRoom(a0)
  1542.  
  1543.  move.w 12(a0),d0
  1544.  move.l ZoneAdds,a1
  1545.  move.l (a1,d0.w*4),a1
  1546.  add.l LEVELDATA,a1
  1547.  move.l ToZoneFloor(a1),d0
  1548.  tst.b ObjInTop(a0)
  1549.  beq.s .okinbot
  1550.  move.l ToUpperFloor(a1),d0
  1551. .okinbot:
  1552.  asr.l #7,d0
  1553.  sub.w #32,d0
  1554.  move.w d0,4(a0)
  1555.  
  1556.  
  1557. HealFactor EQU 18
  1558.  
  1559.  
  1560.  cmp.w #127,PLR1_energy
  1561.  bge .NotSameZone
  1562.  
  1563.  move.b PLR1_StoodInTop,d0
  1564.  move.b ObjInTop(a0),d1
  1565.  eor.b d1,d0
  1566.  bne .NotSameZone
  1567.  
  1568.  move.w PLR1_xoff,oldx
  1569.  move.w PLR1_zoff,oldz
  1570.  move.w PLR1_Zone,d7
  1571.  
  1572.  cmp.w 12(a0),d7
  1573.  bne .NotSameZone
  1574.  move.w (a0),d0
  1575.  move.l ObjectPoints,a1
  1576.  move.w (a1,d0.w*8),newx
  1577.  move.w 4(a1,d0.w*8),newz
  1578.  move.l #100*100,d2
  1579.  jsr CheckHit
  1580.  tst.b hitwall
  1581.  beq .NotPickedUp
  1582.  
  1583.  move.l PLR1_Obj,a2
  1584.  move.w (a2),d0
  1585.  move.l #ObjRotated,a2
  1586.  move.l (a2,d0.w*8),Noisex
  1587.  move.w #50,Noisevol
  1588.  move.w #4,Samplenum
  1589.  move.b #2,chanpick
  1590.  clr.b notifplaying
  1591.  move.b 1(a0),IDNUM
  1592.  movem.l a0/a1/d2/d6/d7,-(a7)
  1593.  jsr MakeSomeNoise
  1594.  movem.l (a7)+,a0/a1/d2/d6/d7
  1595.  
  1596.  move.w #-1,12(a0)
  1597.  move.w #-1,GraphicRoom(a0)
  1598.  move.w HealFactor(a0),d0
  1599.  add.w PLR1_energy,d0
  1600.  cmp.w #127,d0
  1601.  ble.s .okokokokokok
  1602.  move.w #127,d0
  1603. .okokokokokok:
  1604.  move.w d0,PLR1_energy
  1605.  
  1606. .NotPickedUp:
  1607.  
  1608. .NotSameZone:
  1609.  
  1610. MEDIPLR2
  1611.  
  1612.  cmp.w #127,PLR2_energy
  1613.  bge .NotSameZone
  1614.  
  1615.  move.b PLR2_StoodInTop,d0
  1616.  move.b ObjInTop(a0),d1
  1617.  eor.b d1,d0
  1618.  bne .NotSameZone
  1619.  
  1620.  move.w PLR2_xoff,oldx
  1621.  move.w PLR2_zoff,oldz
  1622.  move.w PLR2_Zone,d7
  1623.  move.w 12(a0),d0
  1624.  
  1625.  cmp.w 12(a0),d7
  1626.  bne .NotSameZone
  1627.  move.w (a0),d0
  1628.  move.l ObjectPoints,a1
  1629.  move.w (a1,d0.w*8),newx
  1630.  move.w 4(a1,d0.w*8),newz
  1631.  move.l #100*100,d2
  1632.  jsr CheckHit
  1633.  tst.b hitwall
  1634.  beq .NotPickedUp
  1635.  
  1636.  move.l PLR2_Obj,a2
  1637.  move.w (a2),d0
  1638.  move.l #ObjRotated,a2
  1639.  move.l (a2,d0.w*8),Noisex
  1640.  move.w #50,Noisevol
  1641.  move.w #4,Samplenum
  1642.  move.b #2,chanpick
  1643.  clr.b notifplaying
  1644.  move.b 1(a0),IDNUM
  1645.  movem.l a0/a1/d2/d6/d7,-(a7)
  1646.  jsr MakeSomeNoise
  1647.  movem.l (a7)+,a0/a1/d2/d6/d7
  1648.  
  1649.  move.w #-1,12(a0)
  1650.  move.w #-1,GraphicRoom(a0)
  1651.  move.w HealFactor(a0),d0
  1652.  add.w PLR2_energy,d0
  1653.  cmp.w #127,d0
  1654.  ble.s .okokokokokok
  1655.  move.w #127,d0
  1656. .okokokokokok:
  1657.  move.w d0,PLR2_energy
  1658.  
  1659. .NotPickedUp:
  1660.  
  1661. .NotSameZone:
  1662.  
  1663.  
  1664.  rts
  1665.  
  1666. AMGR:
  1667.  dc.w 3,4,5,0,29,0,0,28
  1668.  
  1669. ItsAnAmmoClip:
  1670.  
  1671.  move.w #$0f0f,14(a0)
  1672.  clr.b worry(a0)
  1673.  move.w 12(a0),GraphicRoom(a0)
  1674.  
  1675. AmmoType EQU 18
  1676.  move.w AmmoType(a0),d0
  1677.  move.w AMGR(pc,d0.w*2),10(a0)
  1678.  
  1679.  move.b PLR1_StoodInTop,d0
  1680.  move.b ObjInTop(a0),d1
  1681.  eor.b d1,d0
  1682.  bne .NotSameZone
  1683.  move.w PLR1_xoff,oldx
  1684.  move.w PLR1_zoff,oldz
  1685.  move.w PLR1_Zone,d7
  1686.  move.w 12(a0),d0
  1687.  move.l ZoneAdds,a1
  1688.  move.l (a1,d0.w*4),a1
  1689.  add.l LEVELDATA,a1
  1690.  move.l ToZoneFloor(a1),d0
  1691.  tst.b ObjInTop(a0)
  1692.  beq.s .okinbot
  1693.  move.l ToUpperFloor(a1),d0
  1694. .okinbot:
  1695.   asr.l #7,d0
  1696.  sub.w #32,d0
  1697.  move.w d0,4(a0)
  1698.  
  1699.  cmp.w 12(a0),d7
  1700.  bne .NotSameZone
  1701.  move.w (a0),d0
  1702.  move.l ObjectPoints,a1
  1703.  move.w (a1,d0.w*8),newx
  1704.  move.w 4(a1,d0.w*8),newz
  1705.  move.l #100*100,d2
  1706.  jsr CheckHit
  1707.  tst.b hitwall
  1708.  beq .NotPickedUp
  1709.  
  1710.  move.w AmmoType(a0),d0
  1711.  lea PLR1_GunData,a6
  1712.  lsl.w #2,d0
  1713.  lea (a6,d0.w*8),a6
  1714.  cmp.w #80*8,(a6)
  1715.  bge .NotPickedUp
  1716.  
  1717.  move.l PLR1_Obj,a2
  1718.  move.w (a2),d0
  1719.  move.l #ObjRotated,a2
  1720.  move.l (a2,d0.w*8),Noisex
  1721.  move.w #50,Noisevol
  1722.  move.w #11,Samplenum
  1723.  clr.b notifplaying
  1724.  move.b 1(a0),IDNUM
  1725.  movem.l a0/a1/d2/d6/d7,-(a7)
  1726.  jsr MakeSomeNoise
  1727.  movem.l (a7)+,a0/a1/d2/d6/d7
  1728.  
  1729.  move.w #-1,12(a0)
  1730.  move.w #-1,GraphicRoom(a0)
  1731.  move.w AmmoType(a0),d0
  1732.  lea PLR1_GunData,a6
  1733.  lsl.w #2,d0
  1734.  lea (a6,d0.w*8),a6
  1735.  moveq #0,d0
  1736.  move.b 4(a6),d0
  1737.  asl.w #3,d0
  1738.  move.w (a6),d1
  1739.  add.w d0,d1
  1740.  move.w d1,(a6)
  1741.  
  1742. .NotPickedUp:
  1743.  
  1744. .NotSameZone:
  1745.  
  1746. AMMOPLR2:
  1747.  
  1748.  move.b PLR2_StoodInTop,d0
  1749.  move.b ObjInTop(a0),d1
  1750.  eor.b d1,d0
  1751.  bne .NotSameZone
  1752.  move.w PLR2_xoff,oldx
  1753.  move.w PLR2_zoff,oldz
  1754.  move.w PLR2_Zone,d7
  1755.  move.w 12(a0),d0
  1756.  move.l ZoneAdds,a1
  1757.  move.l (a1,d0.w*4),a1
  1758.  add.l LEVELDATA,a1
  1759.  move.l ToZoneFloor(a1),d0
  1760.  tst.b ObjInTop(a0)
  1761.  beq.s .okinbot
  1762.  move.l ToUpperFloor(a1),d0
  1763. .okinbot:
  1764.   asr.l #7,d0
  1765.  sub.w #16,d0
  1766.  move.w d0,4(a0)
  1767.  
  1768.  cmp.w 12(a0),d7
  1769.  bne .NotSameZone
  1770.  move.w (a0),d0
  1771.  move.l ObjectPoints,a1
  1772.  move.w (a1,d0.w*8),newx
  1773.  move.w 4(a1,d0.w*8),newz
  1774.  move.l #100*100,d2
  1775.  jsr CheckHit
  1776.  tst.b hitwall
  1777.  beq .NotPickedUp
  1778.  
  1779.  move.w AmmoType(a0),d0
  1780.  lea PLR2_GunData,a6
  1781.  lsl.w #2,d0
  1782.  lea (a6,d0.w*8),a6
  1783.  cmp.w #80*8,(a6)
  1784.  bge .NotPickedUp
  1785.  
  1786.  
  1787.  move.l PLR2_Obj,a2
  1788.  move.w (a2),d0
  1789.  move.l #ObjRotated,a2
  1790.  move.l (a2,d0.w*8),Noisex
  1791.  move.w #50,Noisevol
  1792.  move.w #11,Samplenum
  1793.  clr.b notifplaying
  1794.  move.b 1(a0),IDNUM
  1795.  movem.l a0/a1/d2/d6/d7,-(a7)
  1796.  jsr MakeSomeNoise
  1797.  movem.l (a7)+,a0/a1/d2/d6/d7
  1798.  
  1799.  move.w #-1,12(a0)
  1800.  move.w #-1,GraphicRoom(a0)
  1801.  move.w AmmoType(a0),d0
  1802.  lea PLR2_GunData,a6
  1803.  lsl.w #2,d0
  1804.  lea (a6,d0.w*8),a6
  1805.  moveq #0,d0
  1806.  move.b 4(a6),d0
  1807.  asl.w #3,d0
  1808.  move.w (a6),d1
  1809.  add.w d0,d1
  1810.  move.w d1,(a6)
  1811.  
  1812. .NotPickedUp:
  1813.  
  1814. .NotSameZone:
  1815.  
  1816.  
  1817.  rts
  1818.  
  1819.  
  1820. ItsABigGun:
  1821.  move.w 12(a0),GraphicRoom(a0)
  1822.  
  1823.  clr.b worry(a0)
  1824.  
  1825.  move.b PLR1_StoodInTop,d0
  1826.  move.b ObjInTop(a0),d1
  1827.  eor.b d1,d0
  1828.  bne .NotSameZone
  1829.  move.w PLR1_xoff,oldx
  1830.  move.w PLR1_zoff,oldz
  1831.  move.w PLR1_Zone,d7
  1832.  move.w 12(a0),d0
  1833.  move.l ZoneAdds,a1
  1834.  move.l (a1,d0.w*4),a1
  1835.  add.l LEVELDATA,a1
  1836.  move.l ToZoneFloor(a1),d0
  1837.  tst.b ObjInTop(a0)
  1838.  beq.s .okinbot
  1839.  move.l ToUpperFloor(a1),d0
  1840. .okinbot:
  1841.   asr.l #7,d0
  1842. ; add.w #16,d0
  1843.  moveq #0,d1
  1844.  move.b 7(a0),d1
  1845.  sub.w d1,d0
  1846.  
  1847.  move.w d0,4(a0)
  1848.  cmp.w 12(a0),d7
  1849.  bne .NotSameZone
  1850.  move.w (a0),d0
  1851.  move.l ObjectPoints,a1
  1852.  move.w (a1,d0.w*8),newx
  1853.  move.w 4(a1,d0.w*8),newz
  1854.  move.l #100*100,d2
  1855.  jsr CheckHit
  1856.  tst.b hitwall
  1857.  beq .NotPickedUp
  1858.  
  1859.  move.l PLR1_Obj,a2
  1860.  move.w (a2),d0
  1861.  move.l #ObjRotated,a2
  1862.  move.l (a2,d0.w*8),Noisex
  1863.  move.w #50,Noisevol
  1864.  move.w #4,Samplenum
  1865.  move.b #2,chanpick
  1866.  clr.b notifplaying
  1867.  move.b 1(a0),IDNUM
  1868.  movem.l a0/a1/d2/d6/d7,-(a7)
  1869.  jsr MakeSomeNoise
  1870.  movem.l (a7)+,a0/a1/d2/d6/d7
  1871.  
  1872.  move.l #Cheese,FacesPtr
  1873.  move.w #4,Cheese
  1874.  move.w #-1,FacesCounter
  1875.  moveq #0,d0
  1876.  move.b 17(a0),d0
  1877.  move.l #PLR1_GunData+32,a1
  1878.  move.l #AmmoInGuns,a2
  1879.  move.w d0,d1
  1880.  lsl.w #2,d0
  1881.  st 7(a1,d0.w*8)
  1882.  move.w (a2,d1.w*2),d1
  1883.  add.w d1,(a1,d0.w*8)
  1884.  
  1885.  
  1886.  move.w #-1,12(a0)
  1887.  move.w #-1,GraphicRoom(a0)
  1888.  
  1889. .NotPickedUp:
  1890.  
  1891. .NotSameZone:
  1892.  
  1893. GUNPLR2:
  1894.  
  1895.  move.b PLR2_StoodInTop,d0
  1896.  move.b ObjInTop(a0),d1
  1897.  eor.b d1,d0
  1898.  bne .NotSameZone
  1899.  move.w PLR2_xoff,oldx
  1900.  move.w PLR2_zoff,oldz
  1901.  move.w PLR2_Zone,d7
  1902.  move.w 12(a0),d0
  1903.  move.l ZoneAdds,a1
  1904.  move.l (a1,d0.w*4),a1
  1905.  add.l LEVELDATA,a1
  1906.  move.l ToZoneFloor(a1),d0
  1907.  tst.b ObjInTop(a0)
  1908.  beq.s .okinbot
  1909.  move.l ToUpperFloor(a1),d0
  1910. .okinbot:
  1911.   asr.l #7,d0
  1912. ; add.w #16,d0
  1913.  moveq #0,d1
  1914.  move.b 7(a0),d1
  1915.  sub.w d1,d0
  1916.  
  1917.  move.w d0,4(a0)
  1918.  cmp.w 12(a0),d7
  1919.  bne .NotSameZone
  1920.  move.w (a0),d0
  1921.  move.l ObjectPoints,a1
  1922.  move.w (a1,d0.w*8),newx
  1923.  move.w 4(a1,d0.w*8),newz
  1924.  move.l #100*100,d2
  1925.  jsr CheckHit
  1926.  tst.b hitwall
  1927.  beq .NotPickedUp
  1928.  
  1929.  move.l PLR2_Obj,a2
  1930.  move.w (a2),d0
  1931.  move.l #ObjRotated,a2
  1932.  move.l (a2,d0.w*8),Noisex
  1933.  move.w #50,Noisevol
  1934.  move.w #4,Samplenum
  1935.  move.b #2,chanpick
  1936.  clr.b notifplaying
  1937.  move.b 1(a0),IDNUM
  1938.  movem.l a0/a1/d2/d6/d7,-(a7)
  1939.  jsr MakeSomeNoise
  1940.  movem.l (a7)+,a0/a1/d2/d6/d7
  1941.  
  1942.  move.l #Cheese,FacesPtr
  1943.  move.w #4,Cheese
  1944.  move.w #-1,FacesCounter
  1945.  moveq #0,d0
  1946.  move.b 17(a0),d0
  1947.  move.l #PLR2_GunData+32,a1
  1948.  move.l #AmmoInGuns,a2
  1949.  move.w d0,d1
  1950.  lsl.w #2,d0
  1951.  st 7(a1,d0.w*8)
  1952.  move.w (a2,d1.w*2),d1
  1953.  add.w d1,(a1,d0.w*8)
  1954.  
  1955.  
  1956.  move.w #-1,12(a0)
  1957.  move.w #-1,GraphicRoom(a0)
  1958.  
  1959. .NotPickedUp:
  1960.  
  1961. .NotSameZone:
  1962.  
  1963.  
  1964.  rts
  1965.  
  1966. OFFSETTOGRAPH:
  1967.  dc.l (40*8)*43+10
  1968.  dc.l (40*8)*11+12
  1969.  dc.l (40*8)*11+22
  1970.  dc.l (40*8)*43+24
  1971.  
  1972. AmmoInGuns:
  1973.  dc.w 0
  1974.  dc.w 5
  1975.  dc.w 1
  1976.  dc.w 0
  1977.  dc.w 1
  1978.  dc.w 0
  1979.  dc.w 0
  1980.  dc.w 5
  1981.  
  1982. ItsAKey:
  1983.  
  1984.  move.w #$0f0f,14(a0)
  1985.  
  1986.  tst.b NASTY
  1987.  bne .yesnas
  1988.  move.w #-1,12(a0)
  1989.  rts
  1990. .yesnas:
  1991.  
  1992.  move.w 12(a0),GraphicRoom(a0)
  1993.  clr.b worry(a0)
  1994.  
  1995.  move.b PLR1_StoodInTop,d0
  1996.  move.b ObjInTop(a0),d1
  1997.  eor.b d1,d0
  1998.  bne .NotSameZone
  1999.  
  2000.  move.w PLR1_xoff,oldx
  2001.  move.w PLR1_zoff,oldz
  2002.  move.w PLR1_Zone,d7
  2003.  move.w 12(a0),d0
  2004.  move.l ZoneAdds,a1
  2005.  move.l (a1,d0.w*4),a1
  2006.  add.l LEVELDATA,a1
  2007.  move.l 2(a1),d0
  2008.  asr.l #7,d0
  2009.  sub.w #16,d0
  2010.  move.w d0,4(a0)
  2011.  cmp.w 12(a0),d7
  2012.  bne .NotSameZone
  2013.  move.w (a0),d0
  2014.  move.l ObjectPoints,a1
  2015.  move.w (a1,d0.w*8),newx
  2016.  move.w 4(a1,d0.w*8),newz
  2017.  move.l #100*100,d2
  2018.  jsr CheckHit
  2019.  tst.b hitwall
  2020.  beq .NotPickedUp
  2021.  
  2022.  move.w #0,Noisex
  2023.  move.w #0,Noisez
  2024.  move.w #50,Noisevol
  2025.  move.w #4,Samplenum
  2026.  move.b #2,chanpick
  2027.  clr.b notifplaying
  2028.  move.b 1(a0),IDNUM
  2029.  movem.l a0/a1/d2/d6/d7,-(a7)
  2030.  jsr MakeSomeNoise
  2031.  movem.l (a7)+,a0/a1/d2/d6/d7
  2032.  
  2033.  move.w #-1,12(a0)
  2034.  move.w #-1,GraphicRoom(a0)
  2035.  move.b 17(a0),d0
  2036.  or.b d0,Conditions+1
  2037.  
  2038.  move.l Panel,a2
  2039.  moveq #0,d1
  2040.  lsr.b #1,d0
  2041.  bcs.s .done
  2042.  addq #1,d1
  2043.  lsr.b #1,d0
  2044.  bcs.s .done
  2045.  addq #1,d1
  2046.  lsr.b #1,d0
  2047.  bcs.s .done
  2048.  addq #1,d1 
  2049. .done
  2050.  
  2051.  move.l #OFFSETTOGRAPH,a1
  2052.  add.l (a1,d1.w*4),a2
  2053.  move.l #PanelKeys,a1
  2054.  
  2055.  muls #6*22*8,d1
  2056.  
  2057.  adda.w d1,a1
  2058.  
  2059.  move.w #22*8-1,d0    ;lines
  2060. .lines:
  2061.  
  2062.  move.l (a1)+,d1
  2063.  or.l d1,(a2)
  2064.  move.w (a1)+,d1
  2065.  or.w d1,4(a2)
  2066.  adda.w #40,a2
  2067.  
  2068.  dbra d0,.lines
  2069.  
  2070.  
  2071. .NotPickedUp:
  2072.  
  2073. .NotSameZone:
  2074.  
  2075.  rts
  2076.  
  2077. Conditions: dc.l 0
  2078.  
  2079. ; Format of animations:
  2080. ; Size (-1 = and of anim) (w)
  2081. ; Address of Frame. (l)
  2082. ; height offset (w)
  2083.  
  2084. Bul1Anim:
  2085.  dc.w 20*256+15
  2086.  dc.w 6,8
  2087.  dc.w 0
  2088.  dc.w 17*256+17
  2089.  dc.w 6,9
  2090.  dc.w 0
  2091.  dc.w 15*256+20
  2092.  dc.w 6,10
  2093.  dc.w 0
  2094.  dc.w 17*256+17
  2095.  dc.w 6,11
  2096.  dc.w 0
  2097.  dc.l -1
  2098.  
  2099. Bul1Pop
  2100.  dc.b 25,25
  2101.  dc.w 1,6
  2102.  dc.w 0
  2103.  dc.b 25,25
  2104.  dc.w 1,7
  2105.  dc.w -4
  2106.  dc.b 25,25
  2107.  dc.w 1,8
  2108.  dc.w -4
  2109.  dc.b 25,25
  2110.  dc.w 1,9
  2111.  dc.w -4
  2112.  dc.b 25,25
  2113.  dc.w 1,10
  2114.  dc.w -4
  2115.  dc.b 25,25
  2116.  dc.w 1,11
  2117.  dc.w -4
  2118.  dc.b 25,25
  2119.  dc.w 1,12
  2120.  dc.w -4
  2121.  dc.b 25,25
  2122.  dc.w 1,13
  2123.  dc.w -4
  2124.  dc.b 25,25
  2125.  dc.w 1,14
  2126.  dc.w -4
  2127.  dc.b 25,25
  2128.  dc.w 1,15
  2129.  dc.w -4
  2130.  dc.b 25,25
  2131.  dc.w 1,16
  2132.  dc.w -4
  2133.  dc.l -1
  2134.  
  2135. Bul3Anim:
  2136.  dc.b 25,25
  2137.  dc.w 0,12
  2138.  dc.w 0
  2139.  dc.b 25,25
  2140.  dc.w 0,13
  2141.  dc.w 0
  2142.  dc.b 25,25
  2143.  dc.w 0,14
  2144.  dc.w 0
  2145.  dc.b 25,25
  2146.  dc.w 0,15
  2147.  dc.w 0
  2148.  dc.l -1
  2149.  
  2150. Bul3Pop:
  2151.  dc.l -1
  2152.  
  2153. Bul4Anim:
  2154.  dc.b 25,25
  2155.  dc.w 6,4
  2156.  dc.w 0
  2157.  dc.b 25,25
  2158.  dc.w 6,5
  2159.  dc.w 0
  2160.  dc.b 25,25
  2161.  dc.w 6,6
  2162.  dc.w 0
  2163.  dc.b 25,25
  2164.  dc.w 6,7
  2165.  dc.w 0
  2166.  dc.l -1
  2167.  
  2168. Bul4Pop:
  2169.  dc.b 20,20
  2170.  dc.w 6,4
  2171.  dc.w 0
  2172.  dc.b 15,15
  2173.  dc.w 6,5
  2174.  dc.w 0
  2175.  dc.b 10,10
  2176.  dc.w 6,6
  2177.  dc.w 0
  2178.  dc.b 5,5
  2179.  dc.w 6,7
  2180.  dc.w 0
  2181.  dc.l -1
  2182.  
  2183. Bul5Anim:
  2184.  dc.b 10,10
  2185.  dc.w 6,4
  2186.  dc.w 0
  2187.  dc.b 10,10
  2188.  dc.w 6,5
  2189.  dc.w 0
  2190.  dc.b 10,10
  2191.  dc.w 6,6
  2192.  dc.w 0
  2193.  dc.b 10,10
  2194.  dc.w 6,7
  2195.  dc.w 0
  2196.  dc.l -1
  2197.  
  2198. Bul5Pop:
  2199.  dc.b 8,8
  2200.  dc.w 6,4
  2201.  dc.w 0
  2202.  dc.b 6,6
  2203.  dc.w 6,5
  2204.  dc.w 0
  2205.  dc.b 4,4
  2206.  dc.w 6,6
  2207.  dc.w 0
  2208.  dc.l -1
  2209.  
  2210. grenAnim:
  2211.  dc.b 25,25
  2212.  dc.w 1,21
  2213.  dc.w 0
  2214.  dc.b 25,25
  2215.  dc.w 1,22
  2216.  dc.w 0
  2217.  dc.b 25,25
  2218.  dc.w 1,23
  2219.  dc.w 0
  2220.  dc.b 25,25
  2221.  dc.w 1,24
  2222.  dc.w 0
  2223.  dc.l -1
  2224.  
  2225. Bul2Anim:
  2226.  dc.b 25,25
  2227.  dc.w -18,4
  2228.  dc.w 0
  2229.  dc.b 25,25
  2230.  dc.w -18,5
  2231.  dc.w 0
  2232.  dc.b 25,25
  2233.  dc.w -18,6
  2234.  dc.w 0
  2235.  dc.b 25,25
  2236.  dc.w -18,7
  2237.  dc.w 0
  2238.  dc.b 25,25
  2239.  dc.w -18,4
  2240.  dc.w 0
  2241.  dc.b 25,25
  2242.  dc.w -18,5
  2243.  dc.w 0
  2244.  dc.b 25,25
  2245.  dc.w -18,6
  2246.  dc.w 0
  2247.  dc.b 25,25
  2248.  dc.w -18,7
  2249.  dc.w 0
  2250.  dc.w -1
  2251.  
  2252.  
  2253. Bul2Pop:
  2254.  dc.b 25,25
  2255.  dc.w 2,8
  2256.  dc.w -4
  2257.  dc.b 29,29
  2258.  dc.w 2,9
  2259.  dc.w -4
  2260.  dc.b 33,33
  2261.  dc.w 2,10
  2262.  dc.w -4
  2263.  dc.b 37,37
  2264.  dc.w 2,11
  2265.  dc.w -4
  2266.  dc.b 41,41
  2267.  dc.w 2,12
  2268.  dc.w -4
  2269.  dc.b 45,45
  2270.  dc.w 2,13
  2271.  dc.w -4
  2272.  dc.b 49,49
  2273.  dc.w 2,14
  2274.  dc.w -4
  2275.  dc.b 53,53
  2276.  dc.w 2,15
  2277.  dc.w -4
  2278.  dc.b 57,57
  2279.  dc.w 2,16
  2280.  dc.w -4
  2281.  dc.b 61,61
  2282.  dc.w 2,17
  2283.  dc.w -4
  2284.  dc.b 65,65
  2285.  dc.w 2,18
  2286.  dc.w -4
  2287.  dc.b 69,69
  2288.  dc.w 2,19
  2289.  dc.w -4
  2290.  dc.w -1
  2291.  
  2292. RockAnim:
  2293.  dc.b 16,16
  2294.  dc.w 6,0
  2295.  dc.w 0
  2296.  dc.b 16,16
  2297.  dc.w 6,1
  2298.  dc.w 0
  2299.  dc.b 16,16
  2300.  dc.w 6,2
  2301.  dc.w 0
  2302.  dc.b 16,16
  2303.  dc.w 6,3
  2304.  dc.w 0  
  2305.  dc.l -1
  2306.  
  2307. val SET 100
  2308.  
  2309. RockPop:
  2310.  dc.b val,val
  2311.  dc.w 8,0
  2312.  dc.w -4
  2313. val SET val+10 
  2314.  dc.b val,val
  2315.  dc.w 8,1
  2316.  dc.w 0
  2317. val SET val+10 
  2318.  dc.b val,val
  2319.  dc.w 8,2
  2320.  dc.w -4
  2321. val SET val+10 
  2322.  dc.b val,val
  2323.  dc.w 8,3
  2324.  dc.w -4
  2325. val SET val+10 
  2326.  dc.b val,val
  2327.  dc.w 8,4
  2328.  dc.w -4
  2329. val SET val+10 
  2330.  dc.b val,val
  2331.  dc.w 8,4
  2332.  dc.w -4
  2333. val SET val+10 
  2334.  dc.b val,val
  2335.  dc.w 8,5
  2336.  dc.w -4
  2337. val SET val+10 
  2338.  dc.b val,val
  2339.  dc.w 8,5
  2340.  dc.w -4
  2341. val SET val+10 
  2342.  dc.b val,val
  2343.  dc.w 8,6
  2344.  dc.w -4
  2345. val SET val+10 
  2346.  dc.b val,val
  2347.  dc.w 8,6
  2348.  dc.w -4
  2349. val SET val+10 
  2350.  dc.b val,val
  2351.  dc.w 8,7
  2352.  dc.w -4
  2353. val SET val+10 
  2354.  dc.b val,val
  2355.  dc.w 8,7
  2356.  dc.w -4
  2357. val SET val+10 
  2358.  dc.b val,val
  2359.  dc.w 8,8
  2360.  dc.w -4
  2361. val SET val+10 
  2362.  dc.b val,val
  2363.  dc.w 8,8
  2364.  dc.w -4
  2365.  dc.l -1
  2366.  
  2367.  
  2368. val SET 5
  2369.  
  2370. FlameAnim:
  2371.  
  2372.  dc.b val,val
  2373.  dc.w 8,0
  2374.  dc.w 0
  2375. val SET val+4 
  2376.  dc.b val,val
  2377.  dc.w 8,1
  2378.  dc.w 0
  2379. val SET val+4 
  2380.  dc.b val,val
  2381.  dc.w 8,2
  2382.  dc.w 0
  2383. val SET val+4 
  2384.  dc.b val,val
  2385.  dc.w 8,3
  2386.  dc.w 0
  2387. val SET val+4 
  2388.  dc.b val,val
  2389.  dc.w 8,4
  2390.  dc.w 0
  2391. val SET val+4 
  2392.  dc.b val,val
  2393.  dc.w 8,4
  2394.  dc.w 0
  2395. val SET val+4 
  2396.  dc.b val,val
  2397.  dc.w 8,5
  2398.  dc.w 0
  2399. val SET val+4 
  2400.  dc.b val,val
  2401.  dc.w 8,5
  2402.  dc.w 0
  2403. val SET val+4 
  2404.  dc.b val,val
  2405.  dc.w 8,5
  2406.  dc.w 0
  2407. val SET val+4 
  2408.  dc.b val,val
  2409.  dc.w 8,6
  2410.  dc.w 0
  2411. val SET val+4 
  2412.  dc.b val,val
  2413.  dc.w 8,6
  2414.  dc.w 0
  2415. val SET val+4 
  2416.  dc.b val,val
  2417.  dc.w 8,6
  2418.  dc.w 0
  2419. val SET val+6 
  2420.  dc.b val,val
  2421.  dc.w 8,7
  2422.  dc.w 0
  2423. val SET val+8 
  2424.  dc.b val,val
  2425.  dc.w 8,7
  2426.  dc.w 0
  2427. val SET val+8 
  2428.  dc.b val,val
  2429.  dc.w 8,7
  2430.  dc.w 0
  2431. val SET val+8 
  2432.  dc.b val,val
  2433.  dc.w 8,7
  2434.  dc.w 0
  2435. val SET val+8 
  2436.  dc.b val,val
  2437.  dc.w 8,8
  2438.  dc.w 0
  2439. val SET val+8 
  2440.  dc.b val,val
  2441.  dc.w 8,8
  2442.  dc.w 0
  2443. val SET val+8 
  2444.  dc.b val,val
  2445.  dc.w 8,8
  2446.  dc.w 0
  2447.  
  2448.  dc.l -1
  2449.  
  2450. FlamePop:
  2451. val SET 4*35
  2452.  dc.b val,val
  2453.  dc.w 8,7
  2454.  dc.w 0
  2455. val SET val+4 
  2456.  dc.b val,val
  2457.  dc.w 8,7
  2458.  dc.w 0
  2459. val SET val+4 
  2460.  dc.b val,val
  2461.  dc.w 8,7
  2462.  dc.w 0
  2463. val SET val+4 
  2464.  dc.b val,val
  2465.  dc.w 8,8
  2466.  dc.w 0
  2467. val SET val+4 
  2468.  dc.b val,val
  2469.  dc.w 8,8
  2470.  dc.w 0
  2471. val SET val+4 
  2472.  dc.b val,val
  2473.  dc.w 8,8
  2474.  dc.w 0
  2475.  
  2476.  dc.l -1
  2477.  
  2478. Explode1Anim: 
  2479.  dc.b 25,25
  2480.  dc.w 0,16
  2481.  dc.w 0
  2482.  dc.b 25,25
  2483.  dc.w 0,17
  2484.  dc.w 0
  2485.  dc.b 25,25
  2486.  dc.w 0,18
  2487.  dc.w 0
  2488.  dc.b 25,25
  2489.  dc.w 0,19
  2490.  dc.w 0
  2491.  dc.l -1
  2492.  
  2493. Explode1Pop:
  2494.  dc.b 20,20
  2495.  dc.w 0,16
  2496.  dc.w 1
  2497.  dc.b 20,20
  2498.  dc.w 0,16
  2499.  dc.w 1
  2500.  dc.b 20,20
  2501.  dc.w 0,16
  2502.  dc.w 1
  2503.  dc.b 20,20
  2504.  dc.w 0,16
  2505.  dc.w 1
  2506.  dc.b 20,20
  2507.  dc.w 0,16
  2508.  dc.w 1
  2509.  dc.b 20,20
  2510.  dc.w 0,16
  2511.  dc.w 1
  2512.  dc.b 20,20
  2513.  dc.w 0,16
  2514.  dc.w 1
  2515.  dc.b 20,20
  2516.  dc.w 0,16
  2517.  dc.w 1
  2518.  
  2519.  dc.b 17,17
  2520.  dc.w 0,16
  2521.  dc.w 1
  2522.  
  2523.  dc.b 13,13
  2524.  dc.w 0,16
  2525.  dc.w 1
  2526.  
  2527.  dc.b 9,9
  2528.  dc.w 0,16
  2529.  dc.w 1
  2530.  
  2531.  dc.l -1
  2532.  
  2533. Explode2Anim: 
  2534.  dc.b 20,20
  2535.  dc.w 0,20
  2536.  dc.w 0
  2537.  dc.b 20,20
  2538.  dc.w 0,21
  2539.  dc.w 0
  2540.  dc.b 20,20
  2541.  dc.w 0,22
  2542.  dc.w 0
  2543.  dc.b 20,20
  2544.  dc.w 0,23
  2545.  dc.w 0
  2546.  dc.l -1
  2547.  
  2548. Explode2Pop:
  2549.  dc.b 20,20
  2550.  dc.w 0,20
  2551.  dc.w 1
  2552.  dc.b 20,20
  2553.  dc.w 0,20
  2554.  dc.w 1
  2555.  dc.b 20,20
  2556.  dc.w 0,20
  2557.  dc.w 1
  2558.  dc.b 20,20
  2559.  dc.w 0,20
  2560.  dc.w 1
  2561.  dc.b 20,20
  2562.  dc.w 0,20
  2563.  dc.w 1
  2564.  dc.b 20,20
  2565.  dc.w 0,20
  2566.  dc.w 1
  2567.  dc.b 20,20
  2568.  dc.w 0,20
  2569.  dc.w 1
  2570.  dc.b 20,20
  2571.  dc.w 0,20
  2572.  dc.w 1
  2573.  
  2574.  dc.b 17,17
  2575.  dc.w 0,20
  2576.  dc.w 1
  2577.  
  2578.  dc.b 13,13
  2579.  dc.w 0,20
  2580.  dc.w 1
  2581.  
  2582.  dc.b 9,9
  2583.  dc.w 0,20
  2584.  dc.w 1
  2585.  
  2586.  dc.l -1
  2587.  
  2588.  
  2589. Explode3Anim: 
  2590.  dc.b 20,20
  2591.  dc.w 0,24
  2592.  dc.w 0
  2593.  dc.b 20,20
  2594.  dc.w 0,25
  2595.  dc.w 0
  2596.  dc.b 20,20
  2597.  dc.w 0,26
  2598.  dc.w 0
  2599.  dc.b 20,20
  2600.  dc.w 0,27
  2601.  dc.w 0
  2602.  dc.l -1
  2603.  
  2604. Explode3Pop:
  2605.  
  2606.  dc.b 17,17
  2607.  dc.w 0,24
  2608.  dc.w 1
  2609.  dc.b 17,17
  2610.  dc.w 0,24
  2611.  dc.w 1
  2612.  dc.b 17,17
  2613.  dc.w 0,24
  2614.  dc.w 1
  2615.  dc.b 17,17
  2616.  dc.w 0,24
  2617.  dc.w 1
  2618.  dc.b 17,17
  2619.  dc.w 0,24
  2620.  dc.w 1
  2621.  dc.b 17,17
  2622.  dc.w 0,24
  2623.  dc.w 1
  2624.  dc.b 17,17
  2625.  dc.w 0,24
  2626.  dc.w 1
  2627.  dc.b 17,17
  2628.  dc.w 0,24
  2629.  dc.w 1
  2630.  
  2631.  dc.b 13,13
  2632.  dc.w 0,24
  2633.  dc.w 1
  2634.  
  2635.  dc.b 9,9
  2636.  dc.w 0,24
  2637.  dc.w 1
  2638.  
  2639.   dc.l -1
  2640.  
  2641. Explode4Anim: 
  2642.  dc.b 30,30
  2643.  dc.w 0,28
  2644.  dc.w 0
  2645.  dc.b 30,30
  2646.  dc.w 0,29
  2647.  dc.w 0
  2648.  dc.b 30,30
  2649.  dc.w 0,30
  2650.  dc.w 0
  2651.  dc.b 30,30
  2652.  dc.w 0,31
  2653.  dc.w 0
  2654.  dc.l -1
  2655.  
  2656. Explode4Pop:
  2657.  
  2658.  dc.b 20,20
  2659.  dc.w 0,28
  2660.  dc.w 0
  2661.  dc.b 20,20
  2662.  dc.w 0,28
  2663.  dc.w 1
  2664.  dc.b 20,20
  2665.  dc.w 0,28
  2666.  dc.w 1
  2667.  dc.b 20,20
  2668.  dc.w 0,28
  2669.  dc.w 1
  2670.  dc.b 20,20
  2671.  dc.w 0,28
  2672.  dc.w 1
  2673.  dc.b 20,20
  2674.  dc.w 0,28
  2675.  dc.w 1
  2676.  dc.b 20,20
  2677.  dc.w 0,28
  2678.  dc.w 1
  2679.  dc.b 20,20
  2680.  dc.w 0,28
  2681.  dc.w 1
  2682.  
  2683.  dc.b 17,17
  2684.  dc.w 0,28
  2685.  dc.w 1
  2686.  
  2687.  dc.b 13,13
  2688.  dc.w 0,28
  2689.  dc.w 1
  2690.  
  2691.  dc.b 9,9
  2692.  dc.w 0,28
  2693.  dc.w 1
  2694.  
  2695.  dc.l -1
  2696.   
  2697. BulletSizes:
  2698.  dc.w $0f0f,$707
  2699.  dc.w $0f0f,$f0f
  2700.  dc.w $0f0f,$1f1f
  2701.  dc.w $1f1f,$1f1f
  2702.  dc.w $0707,$1f1f
  2703.  dc.w $0f0f,$0f0f
  2704.  dc.w $0f0f,$0f0f
  2705.  dc.w $707,$707
  2706.  dc.w 0,0,0,0
  2707. ;10 
  2708.  dc.w 0,0,0,0,0,0,0,0,0,0
  2709.  dc.w 0,0,0,0,0,0,0,0,0,0
  2710. ;20
  2711.  dc.w 0,0,0,0,0,0,0,0,0,0
  2712.  dc.w 0,0,0,0,0,0,0,0,0,0
  2713. ;30
  2714.  dc.w 0,0,0,0,0,0,0,0,0,0
  2715.  dc.w 0,0,0,0,0,0,0,0,0,0
  2716. ;40
  2717.  dc.w 0,0,0,0,0,0,0,0,0,0
  2718.  dc.w 0,0,0,0,0,0,0,0,0,0
  2719. ;50
  2720.  dc.w $0707,$0707,$0707,$0707
  2721.  dc.w $0707,$0707,$0707,$0707
  2722.  
  2723. HitNoises:
  2724.  dc.l -1,-1
  2725.  dc.w 15,200
  2726.  dc.l -1
  2727.  dc.w 15,200
  2728.  dc.l -1,-1,-1,-1,-1
  2729.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2730.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2731.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2732.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2733.  
  2734.  dc.w 13,50,13,50,13,50,13,50
  2735.  
  2736. ExplosiveForce:
  2737.  dc.w 0,0,64,0,40,0,0,0,0,0
  2738.  dc.w 0,0,0,0,0,0,0,0,0,0
  2739.  dc.w 0,0,0,0,0,0,0,0,0,0
  2740.  dc.w 0,0,0,0,0,0,0,0,0,0
  2741.  dc.w 0,0,0,0,0,0,0,0,0,0
  2742.  dc.w 0,0,0,0
  2743.   
  2744. BulletTypes:
  2745.  dc.l Bul1Anim,Bul1Pop
  2746.  dc.l Bul2Anim,Bul2Pop
  2747.  dc.l RockAnim,RockPop
  2748.  dc.l FlameAnim,FlamePop
  2749.  dc.l grenAnim,RockPop
  2750.  dc.l Bul4Anim,Bul4Pop
  2751.  dc.l Bul5Anim,Bul5Pop
  2752.  dc.l Bul1Anim,Bul1Pop
  2753.  dc.l 0,0
  2754.  dc.l 0,0
  2755.  
  2756.  dc.l 0,0
  2757.  dc.l 0,0
  2758.  dc.l 0,0
  2759.  dc.l 0,0
  2760.  dc.l 0,0
  2761.  dc.l 0,0
  2762.  dc.l 0,0
  2763.  dc.l 0,0
  2764.  dc.l 0,0
  2765.  dc.l 0,0
  2766.  
  2767.  dc.l 0,0
  2768.  dc.l 0,0
  2769.  dc.l 0,0
  2770.  dc.l 0,0
  2771.  dc.l 0,0
  2772.  dc.l 0,0
  2773.  dc.l 0,0
  2774.  dc.l 0,0
  2775.  dc.l 0,0
  2776.  dc.l 0,0
  2777.  
  2778.  dc.l 0,0
  2779.  dc.l 0,0
  2780.  dc.l 0,0
  2781.  dc.l 0,0
  2782.  dc.l 0,0
  2783.  dc.l 0,0
  2784.  dc.l 0,0
  2785.  dc.l 0,0
  2786.  dc.l 0,0
  2787.  dc.l 0,0
  2788.  
  2789.  dc.l 0,0
  2790.  dc.l 0,0
  2791.  dc.l 0,0
  2792.  dc.l 0,0
  2793.  dc.l 0,0
  2794.  dc.l 0,0
  2795.  dc.l 0,0
  2796.  dc.l 0,0
  2797.  dc.l 0,0
  2798.  dc.l 0,0
  2799.  
  2800.  dc.l Explode1Anim,Explode1Pop
  2801.  dc.l Explode2Anim,Explode2Pop
  2802.  dc.l Explode3Anim,Explode3Pop
  2803.  dc.l Explode4Anim,Explode4Pop
  2804.  
  2805. tsta: dc.l 0
  2806. timeout: dc.w 0
  2807.  
  2808. ItsABullet:
  2809.  
  2810.  move.b #0,timeout
  2811.  move.w 12(a0),d0
  2812.  move.w d0,GraphicRoom(a0)
  2813.  blt doneshot
  2814.  
  2815.  tst.b shotstatus(a0)
  2816.  bne.s noworrylife
  2817.  
  2818.  moveq #0,d1
  2819.  move.w shotlife(a0),d2
  2820.  blt.s infinite
  2821.  move.b shotsize(a0),d1
  2822.  move.l #PLR1_GunData,a1
  2823.  lsl.w #2,d1
  2824.  move.w 10(a1,d1.w*8),d1
  2825.  blt.s infinite
  2826.  
  2827.  cmp.w d2,d1
  2828.  bge.s notdone
  2829.  
  2830.  st timeout
  2831.  bra.s infinite 
  2832.  
  2833. notdone:
  2834.  
  2835.  move.w TempFrames,d2
  2836.  add.w d2,shotlife(a0)
  2837.  
  2838. infinite:
  2839.  
  2840. noworrylife:
  2841.  
  2842.  move.w #0,extlen
  2843.  move.b #$ff,awayfromwall
  2844.  
  2845.  moveq #0,d1
  2846.  move.b shotsize(a0),d1
  2847.  move.l #BulletTypes,a1
  2848.  lea (a1,d1.w*8),a1 
  2849.  
  2850.  tst.b shotstatus(a0)
  2851.  beq.s notpopping
  2852.  
  2853.  moveq #0,d1
  2854.  move.b shotsize(a0),d1
  2855.  move.l #BulletSizes,a2
  2856.  move.w 2(a2,d1.w*4),14(a0)
  2857.  
  2858.  moveq #0,d1
  2859.  move.b shotanim(a0),d1
  2860.  
  2861.  move.l 4(a1),a2
  2862.  move.w (a2,d1.w*8),d2
  2863.  cmp.w #-1,d2
  2864.  bne.s notdonepopping
  2865.  move.w #-1,12(a0)
  2866.  move.w #-1,GraphicRoom(a0)
  2867.  clr.b shotstatus(a0)
  2868.  move.b #0,shotanim(a0)
  2869.  rts
  2870. notdonepopping:
  2871.  
  2872.  add.b #1,shotanim(a0)
  2873.  move.w d2,6(a0)
  2874.  move.l 2(a2,d1.w*8),8(a0)
  2875.  move.w 6(a2,d1.w*8),d3
  2876.  add.w d3,4(a0)
  2877.  ext.l d3
  2878.  asl.l #7,d3
  2879.  add.l d3,accypos(a0)
  2880.  rts
  2881.  
  2882. notpopping:
  2883.  
  2884.  moveq #0,d1
  2885.  move.b shotsize(a0),d1
  2886.  move.l #BulletSizes,a2
  2887.  move.w (a2,d1.w*4),14(a0)
  2888.  
  2889.  moveq #0,d1
  2890.  move.b shotanim(a0),d1
  2891.  
  2892.  move.l (a1),a2
  2893.  add.b #1,shotanim(a0)
  2894.  move.w (a2,d1.w*8),d2
  2895.  bge.s notdoneanim
  2896.  
  2897.  move.b #0,shotanim(a0)
  2898.  move.w #0,d1
  2899.  
  2900. notdoneanim:
  2901.  
  2902.  move.w (a2,d1.w*8),6(a0)
  2903.  move.l 2(a2,d1.w*8),8(a0)
  2904.  move.w 6(a2,d1.w*8),d3
  2905.  ext.l d3
  2906.  asl.l #7,d3
  2907.  add.l d3,accypos(a0)
  2908.  
  2909.  move.l ZoneAdds,a2
  2910.  move.l (a2,d0.w*4),d0
  2911.  add.l LEVELDATA,d0
  2912.  move.l d0,objroom
  2913.  
  2914. ******************************** 
  2915.  move.l objroom,a3
  2916.  
  2917.  tst.b ObjInTop(a0)
  2918.  beq.s .notintop
  2919.  adda.w #8,a3
  2920. .notintop:
  2921.  
  2922.  move.l 6(a3),d0
  2923.  sub.l accypos(a0),d0
  2924.  cmp.l #10*128,d0
  2925.  blt .nohitroof 
  2926.  
  2927.  btst #0,shotflags+1(a0)
  2928.  beq.s .nobounce
  2929.  
  2930.  neg.w shotyvel(a0)
  2931.  
  2932.  move.l 6(a3),d0
  2933.  add.l #10*128,d0
  2934.  move.l d0,accypos(a0)
  2935.  
  2936.  btst #1,shotflags+1(a0)
  2937.  beq .nohitroof
  2938.  
  2939.  move.l shotxvel(a0),d0
  2940.  asr.l #1,d0
  2941.  move.l d0,shotxvel(a0)
  2942.  move.l shotzvel(a0),d0
  2943.  asr.l #1,d0
  2944.  move.l d0,shotzvel(a0) 
  2945.  
  2946.  bra .nohitroof
  2947.  
  2948. .nobounce: 
  2949.  
  2950.  move.b #0,shotanim(a0)
  2951.  move.b #1,shotstatus(a0)
  2952.  
  2953.  movem.l d0-d7/a0-a6,-(a7)
  2954.  move.l #HitNoises,a2
  2955.  moveq #0,d0
  2956.  move.b shotsize(a0),d0
  2957.  move.l (a2,d0.w*4),d0
  2958.  blt.s .nohitnoise
  2959.  
  2960.  move.l #ObjRotated,a1
  2961.  move.w (a0),d1
  2962.  move.l (a1,d1.w*8),Noisex
  2963.  move.w d0,Noisevol
  2964.  swap d0
  2965.  move.w d0,Samplenum
  2966.  move.b d1,IDNUM
  2967.  jsr MakeSomeNoise
  2968.  
  2969. .nohitnoise:
  2970.  
  2971.  moveq #0,d0
  2972.  move.l #ExplosiveForce,a2
  2973.  move.b shotsize(a0),d0
  2974.  move.w (a2,d0.w*2),d0
  2975.  beq.s .noexplosion
  2976.  
  2977.  move.w newx,Viewerx
  2978.  move.w newz,Viewerz
  2979.  
  2980.  move.w 4(a0),Viewery
  2981.  move.b ObjInTop(a0),ViewerTop
  2982.  
  2983.  bsr ComputeBlast
  2984.  
  2985. .noexplosion:
  2986.  
  2987.  movem.l (a7)+,d0-d7/a0-a6
  2988.  
  2989. .nohitroof:
  2990.  move.l 2(a3),d0
  2991.  sub.l accypos(a0),d0
  2992.  cmp.l #10*128,d0
  2993.  bgt .nohitfloor 
  2994.  
  2995.  btst #0,shotflags+1(a0)
  2996.  beq.s .nobounceup
  2997.  
  2998.  tst.w shotyvel(a0)
  2999.  blt .nohitfloor
  3000.  
  3001.  moveq #0,d0
  3002.  move.w shotyvel(a0),d0
  3003.  asr.w #1,d0
  3004.  neg.w d0
  3005.  move.w d0,shotyvel(a0)
  3006.  
  3007.  move.l 2(a3),d0
  3008.  sub.l #10*128,d0
  3009.  move.l d0,accypos(a0)
  3010.  
  3011.  btst #1,shotflags+1(a0)
  3012.  beq .nohitfloor
  3013.  
  3014.  move.l shotxvel(a0),d0
  3015.  asr.l #1,d0
  3016.  move.l d0,shotxvel(a0)
  3017.  move.l shotzvel(a0),d0
  3018.  asr.l #1,d0
  3019.  move.l d0,shotzvel(a0) 
  3020.  
  3021.  
  3022.  bra .nohitfloor
  3023. .nobounceup: 
  3024.  
  3025.  
  3026.  move.b #0,shotanim(a0)
  3027.  move.b #1,shotstatus(a0)
  3028.  movem.l d0-d7/a0-a6,-(a7)
  3029.  move.l #HitNoises,a2
  3030.  moveq #0,d0
  3031.  move.b shotsize(a0),d0
  3032.  move.l (a2,d0.w*4),d0
  3033.  blt.s .nohitnoise2
  3034.  
  3035.  move.l #ObjRotated,a1
  3036.  move.w (a0),d1
  3037.  move.l (a1,d1.w*8),Noisex
  3038.  move.w d0,Noisevol
  3039.  swap d0
  3040.  move.w d0,Samplenum
  3041.  move.b d1,IDNUM
  3042.  jsr MakeSomeNoise
  3043. .nohitnoise2:
  3044.  moveq #0,d0
  3045.  move.l #ExplosiveForce,a2
  3046.  move.b shotsize(a0),d0
  3047.  move.w (a2,d0.w*2),d0
  3048.  beq.s .noexplosion2
  3049.  
  3050.  move.w 4(a0),Viewery
  3051.  move.w newx,Viewerx
  3052.  move.w newz,Viewerz
  3053.  move.b ObjInTop(a0),ViewerTop
  3054.  bsr ComputeBlast
  3055.  
  3056. .noexplosion2:
  3057.  movem.l (a7)+,d0-d7/a0-a6
  3058. .nohitfloor:
  3059. ******************** 
  3060.  
  3061.  
  3062.  
  3063.  move.l ObjectPoints,a1
  3064.  move.w (a0),d1
  3065.  lea (a1,d1.w*8),a1
  3066.  move.l (a1),d2
  3067.  move.l d2,oldx
  3068.  move.l shotxvel(a0),d3
  3069.  move.w d3,d4
  3070.  swap d3
  3071.  move.w TempFrames,d5
  3072.  muls d5,d3
  3073.  mulu d5,d4
  3074.  swap d3
  3075.  clr.w d3
  3076.  add.l d4,d3
  3077.  add.l d3,d2
  3078.  move.l d2,newx
  3079.  move.l 4(a1),d2
  3080.  move.l d2,oldz
  3081.  move.l shotzvel(a0),d3
  3082.  move.w d3,d4
  3083.  swap d3
  3084.  muls d5,d3
  3085.  mulu d5,d4
  3086.  swap d3
  3087.  clr.w d3
  3088.  add.l d4,d3
  3089.  add.l d3,d2
  3090.  move.l d2,newz
  3091.  move.l accypos(a0),oldy 
  3092.  
  3093.  move.w shotyvel(a0),d3
  3094.  muls TempFrames,d3
  3095.  move.w shotgrav(a0),d5
  3096.  beq.s nograv
  3097.  muls TempFrames,d5
  3098.  add.l d5,d3
  3099.  move.w shotyvel(a0),d6
  3100.  ext.l d6
  3101.  add.l d5,d6
  3102.  cmp.l #10*256,d6
  3103.  blt.s okgrav
  3104.  move.l #10*256,d6
  3105.  okgrav:
  3106.  move.w d6,shotyvel(a0)
  3107. nograv:
  3108.  move.l accypos(a0),d4 
  3109.  add.l d3,d4
  3110.  
  3111.  move.l d4,accypos(a0)
  3112.  sub.l #5*128,d4
  3113.  move.l d4,newy
  3114.  add.l #5*128,d4
  3115.  asr.l #7,d4
  3116.  move.w d4,4(a0)
  3117.  btst #0,shotflags+1(a0)
  3118.  sne.s wallbounce
  3119.  seq.s exitfirst
  3120.  
  3121.  clr.b hitwall
  3122.  move.b ObjInTop(a0),StoodInTop
  3123.  move.w #%0000010000000000,wallflags
  3124.  move.l #0,StepUpVal
  3125.  move.l #$1000000,StepDownVal
  3126.  move.l #10*128,thingheight
  3127.  move.w oldx,d0
  3128.  cmp.w newx,d0
  3129.  bne.s lalal
  3130.  move.w oldz,d0
  3131.  cmp.w newz,d0
  3132.  beq.s nomovebul
  3133.  move.w #1,walllength
  3134.  
  3135. lalal:
  3136.  movem.l d0/d7/a0/a1/a2/a4/a5,-(a7)
  3137.  jsr MoveObject
  3138.  
  3139.  move.w #-15,d0
  3140.  move.w newx,d1
  3141.  move.w newz,d2
  3142.  move.l objroom,a0
  3143.  move.w (a0),d3
  3144.  jsr BRIGHTENPOINTS
  3145.  
  3146.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5
  3147. nomovebul:
  3148.  move.b StoodInTop,ObjInTop(a0)
  3149.   
  3150.  tst.b wallbounce
  3151.  beq.s .notabouncything
  3152.  
  3153.  tst.b hitwall
  3154.  beq .nothitwall
  3155.  
  3156. ; we have hit a wall....
  3157.  
  3158.  move.w shotzvel(a0),d0
  3159.  muls wallxsize,d0
  3160.  move.w shotxvel(a0),d1
  3161.  muls wallzsize,d1
  3162.  sub.l d1,d0
  3163.  divs walllength,d0
  3164.  
  3165.  move.w shotxvel(a0),d1
  3166.  move.w wallzsize,d2
  3167.  add.w d2,d2
  3168.  muls d0,d2
  3169.  divs walllength,d2
  3170.  add.w d2,d1
  3171.  move.w d1,shotxvel(a0)
  3172.  
  3173.  move.w shotzvel(a0),d1
  3174.  move.w wallxsize,d2
  3175.  add.w d2,d2
  3176.  muls d0,d2
  3177.  divs walllength,d2
  3178.  sub.w d2,d1
  3179.  move.w d1,shotzvel(a0)
  3180.  
  3181.  btst #1,shotflags+1(a0)
  3182.  beq .nothitwall
  3183.  
  3184.  move.l shotxvel(a0),d0
  3185.  asr.l #1,d0
  3186.  move.l d0,shotxvel(a0)
  3187.  move.l shotzvel(a0),d0
  3188.  asr.l #1,d0
  3189.  move.l d0,shotzvel(a0) 
  3190.   
  3191.  
  3192.  bra .nothitwall
  3193.  
  3194. .notabouncything:
  3195.   
  3196.  tst.b hitwall
  3197.  beq .nothitwall
  3198.  
  3199.  move.l wallhitheight,d4
  3200.  move.l d4,accypos(a0)
  3201.  asr.l #7,d4
  3202.  move.w d4,4(a0)
  3203.  
  3204. .hitsomething
  3205.  clr.b timeout
  3206.  move.b #0,shotanim(a0)
  3207.  move.b #1,shotstatus(a0)
  3208.  
  3209.  movem.l d0-d7/a0-a6,-(a7)
  3210.  move.l #HitNoises,a2
  3211.  moveq #0,d0
  3212.  move.b shotsize(a0),d0
  3213.  move.l (a2,d0.w*4),d0
  3214.  blt.s .nohitnoise
  3215.  
  3216.  move.l #ObjRotated,a1
  3217.  move.w (a0),d1
  3218.  move.l (a1,d1.w*8),Noisex
  3219.  move.w d0,Noisevol
  3220.  swap d0
  3221.  move.w d0,Samplenum
  3222.  move.b d1,IDNUM
  3223.  jsr MakeSomeNoise
  3224.  
  3225. .nohitnoise:
  3226.  
  3227.  moveq #0,d0
  3228.  move.l #ExplosiveForce,a2
  3229.  move.b shotsize(a0),d0
  3230.  move.w (a2,d0.w*2),d0
  3231.  beq.s .noexplosion
  3232.  
  3233.  move.w newx,Viewerx
  3234.  move.w newz,Viewerz
  3235.  move.w 4(a0),Viewery
  3236.  move.b ObjInTop(a0),ViewerTop
  3237.  bsr ComputeBlast
  3238.  
  3239. .noexplosion:
  3240.  
  3241.  movem.l (a7)+,d0-d7/a0-a6
  3242.  
  3243. ; bra doneshot
  3244.  
  3245. ; rts
  3246.  
  3247. .nothitwall:
  3248.  
  3249.  tst.b timeout
  3250.  bne .hitsomething
  3251.  
  3252. lab:
  3253.  
  3254.  
  3255.  move.l objroom,a3
  3256.  move.w (a3),12(a0)
  3257.  move.w (a3),GraphicRoom(a0)
  3258.  move.l newx,(a1)
  3259.  move.l newz,4(a1)
  3260. ************ 
  3261. * Check if hit a nasty
  3262.  
  3263.  tst.l EnemyFlags(a0)
  3264.  bne.s notasplut
  3265.  rts
  3266. notasplut:
  3267.  
  3268.  move.l ObjectData,a3
  3269.  move.l ObjectPoints,a1
  3270.  move.w newx,d2
  3271.  sub.w oldx,d2
  3272.  move.w d2,xdiff
  3273.  move.w newz,d1
  3274.  sub.w oldz,d1
  3275.  move.w d1,zdiff
  3276.  move.w d1,d3
  3277.  move.w d2,d4
  3278.  muls d2,d2
  3279.  muls d1,d1
  3280.  move.l #1,d0
  3281.  add.l d1,d2
  3282.  beq .oksqr
  3283.  
  3284.  move.w #31,d0
  3285. .findhigh
  3286.  btst d0,d2
  3287.  bne .foundhigh
  3288.  dbra d0,.findhigh
  3289. .foundhigh
  3290.  asr.w #1,d0
  3291.  clr.l d3
  3292.  bset d0,d3
  3293.  move.l d3,d0
  3294.  
  3295.  move.w d0,d1
  3296.  muls d1,d1    ; x*x
  3297.  sub.l d2,d1    ; x*x-a
  3298.  asr.l #1,d1    ; (x*x-a)/2
  3299.  divs d0,d1    ; (x*x-a)/2x
  3300.  sub.w d1,d0    ; second approx
  3301.  bgt .stillnot0
  3302.  move.w #1,d0
  3303. .stillnot0
  3304.  
  3305.  move.w d0,d1
  3306.  muls d1,d1
  3307.  sub.l d2,d1
  3308.  asr.l #1,d1
  3309.  divs d0,d1
  3310.  sub.w d1,d0    ; second approx
  3311.  bgt .stillnot02
  3312.  move.w #1,d0
  3313. .stillnot02
  3314.  
  3315.  move.w d0,d1
  3316.  muls d1,d1
  3317.  sub.l d2,d1
  3318.  asr.l #1,d1
  3319.  divs d0,d1
  3320.  sub.w d1,d0    ; second approx
  3321.  bgt .stillnot03
  3322.  move.w #1,d0
  3323. .stillnot03
  3324.  
  3325. .oksqr
  3326.  move.w d0,Range
  3327.  add.w #40,d0
  3328.  muls d0,d0
  3329.  move.l d0,sqrnum
  3330.  
  3331. .checkloop:
  3332.  tst.w (a3)
  3333.  blt .checkedall
  3334.  tst.w 12(a3)
  3335.  blt .notanasty
  3336.  moveq #0,d1
  3337.  move.b 16(a3),d1
  3338.  move.l EnemyFlags(a0),d7
  3339.  btst d1,d7
  3340.  beq .notanasty
  3341.  tst.b numlives(a3)
  3342.  beq .notanasty
  3343.  
  3344.  move.l #ColBoxTable,a6
  3345.  lea (a6,d1.w*8),a6
  3346.  
  3347.  move.w 4(a3),d1
  3348.  move.w 4(a0),d2
  3349.  sub.w d1,d2
  3350.  bge .okh
  3351.  neg.w d2
  3352. .okh:
  3353.  
  3354.  cmp.w 2(a6),d2
  3355.  bgt .notanasty
  3356.  
  3357.  move.w (a3),d1
  3358.  move.w (a1,d1.w*8),d2
  3359.  move.w d2,d4
  3360.  move.w 4(a1,d1.w*8),d3
  3361.  move.w d3,d5
  3362.  sub.w newx,d4
  3363.  sub.w oldx,d2
  3364.  move.w d2,d6
  3365.  sub.w newz,d5
  3366.  sub.w oldz,d3
  3367.  move.w d3,d7
  3368.  muls zdiff,d6
  3369.  muls xdiff,d7
  3370.  sub.l d7,d6
  3371.  bgt.s .pos
  3372.  neg.l d6
  3373. .pos:
  3374.  divs Range,d6
  3375.  cmp.w (a6),d6
  3376.  bgt .stillgoing
  3377.  
  3378.  muls d2,d2
  3379.  muls d3,d3
  3380.  add.l d3,d2
  3381.  cmp.l sqrnum,d2
  3382.  bgt .stillgoing
  3383.  muls d4,d4
  3384.  muls d5,d5
  3385.  add.l d5,d4
  3386.  cmp.l sqrnum,d4
  3387.  bgt .stillgoing
  3388.  
  3389.  move.b shotpower(a0),d6
  3390.  add.b d6,damagetaken(a3)
  3391.  move.w shotxvel(a0),ImpactX(a3)
  3392.  move.w shotzvel(a0),ImpactZ(a3)
  3393.  move.b #0,shotanim(a0)
  3394.  move.b #1,shotstatus(a0)
  3395.  
  3396.  movem.l d0-d7/a0-a6,-(a7)
  3397.  move.l #HitNoises,a2
  3398.  moveq #0,d0
  3399.  move.b shotsize(a0),d0
  3400.  move.l (a2,d0.w*4),d0
  3401.  blt.s .nohitnoise3
  3402.  
  3403.  move.l #ObjRotated,a1
  3404.  move.w (a0),d1
  3405.  move.l (a1,d1.w*8),Noisex
  3406.  move.w d0,Noisevol
  3407.  swap d0
  3408.  move.w d0,Samplenum
  3409.  move.b d1,IDNUM
  3410.  jsr MakeSomeNoise
  3411. .nohitnoise3:
  3412.  moveq #0,d0
  3413.  move.l #ExplosiveForce,a2
  3414.  move.b shotsize(a0),d0
  3415.  move.w (a2,d0.w*2),d0
  3416.  beq.s .noexplosion3
  3417.  
  3418.  move.w 4(a0),Viewery
  3419.  move.w newx,Viewerx
  3420.  move.w newz,Viewerz
  3421.  bsr ComputeBlast
  3422.  
  3423. .noexplosion3:
  3424.  movem.l (a7)+,d0-d7/a0-a6
  3425.  
  3426.  
  3427.  bra .hitnasty
  3428. .stillgoing:
  3429. .notanasty:
  3430.  add.w #64,a3
  3431.  bra .checkloop
  3432. .hitnasty:
  3433. .checkedall
  3434.  
  3435. doneshot:
  3436.  
  3437.  rts
  3438.  
  3439. tmpnewx: dc.l 0
  3440. tmpnewz: dc.l 0
  3441. hithit: dc.l 0
  3442. sqrnum: dc.l 0
  3443. tmpangpos: dc.l 0
  3444. allbars: dc.l 0
  3445. backrout: ds.b 800
  3446. NUMTOCHECK: dc.w 0 
  3447.  
  3448. MAKEBACKROUT:
  3449.  move.l #backrout+256,d0
  3450.  clr.b d0
  3451.  move.l d0,allbars
  3452.  move.l d0,a1
  3453.  move.l #fromback,a0
  3454.  move.w #400,d0
  3455. putinback:
  3456.  move.b (a0)+,(a1)+
  3457.  dbra d0,putinback
  3458.  rts
  3459.  
  3460. putinbackdrop:
  3461.  
  3462.  move.l a0,-(a7)
  3463.  
  3464.  move.w tmpangpos,d5
  3465.  and.w #8191,d5
  3466.  muls #432,d5
  3467.  divs #8192,d5
  3468.  muls #38*2,d5
  3469.  
  3470. ; CACHE_ON d1
  3471.  
  3472.  move.l frompt,a0
  3473.  adda.w #104*4,a0
  3474.  move.l #EndBackPicture,a3
  3475.  lea.l BackPicture,a1
  3476.  add.l d5,a1
  3477.  move.w #2,d4
  3478.  
  3479.  move.l allbars(pc),a2
  3480.  jmp (a2)
  3481.  
  3482. fromback:
  3483.  move.w #31,d3
  3484. onebar:
  3485. vertline:    
  3486. val SET 0
  3487.  
  3488.  REPT 19
  3489.  move.l (a1)+,d0
  3490.  move.w d0,val+104*4(a0)
  3491.  swap d0
  3492.  move.w d0,val(a0)
  3493. val SET val+104*8
  3494.  ENDR
  3495.  
  3496.  cmp.l a3,a1
  3497.  blt.s notoffrightend
  3498.  move.l #BackPicture,a1
  3499. notoffrightend:
  3500.  
  3501.  addq #4,a0
  3502.  dbra d3,onebar
  3503.  addq #4,a0
  3504.  dbra d4,fromback
  3505.  
  3506.  move.l (a7)+,a0
  3507.  rts
  3508.  
  3509. MaxDamage: dc.w 0
  3510.  
  3511. ComputeBlast:
  3512.  
  3513.  clr.w doneflames
  3514.  
  3515.  move.w d0,d6
  3516.  move.w d0,MaxDamage
  3517.  
  3518.  move.w d0,d1
  3519.  ext.l d6
  3520.  neg.w d1
  3521.  move.w 12(a0),d0
  3522.  jsr Flash
  3523.  
  3524.  move.l ZoneAdds,a2
  3525.  move.l (a2,d0.w*4),a2
  3526.  add.l LEVELDATA,a2
  3527.  move.l a2,MiddleRoom
  3528.  
  3529.  move.l ObjectData,a2
  3530.  suba.w #64,a2
  3531.  move.l #TESTAB,a6
  3532.  
  3533.  move.l a0,-(a7)
  3534.  
  3535. HitObjLoop:
  3536.  move.l MiddleRoom,FromRoom
  3537.  add.w #64,a2
  3538.  move.w (a2),d0
  3539.  blt CheckedEmAll
  3540.  tst.w 12(a2)
  3541.  blt.s HitObjLoop
  3542.  moveq #0,d1
  3543.  move.b 16(a2),d1
  3544.  move.l #%1111111111110111100001,d7    ; possible targets
  3545.  btst d1,d7
  3546.  beq.s HitObjLoop
  3547.  
  3548.  move.w 12(a2),d1
  3549.  move.l ZoneAdds,a3
  3550.  move.l (a3,d1.w*4),a3
  3551.  add.l LEVELDATA,a3
  3552.  move.l a3,ToRoom
  3553.  move.l ObjectPoints,a3
  3554.  move.w (a3,d0.w*8),Targetx
  3555.  move.w 4(a3,d0.w*8),Targetz
  3556.  move.w 4(a2),Targety
  3557.  move.b ObjInTop(a2),TargetTop
  3558.  jsr CanItBeSeen
  3559.  tst.b CanSee
  3560.  beq HitObjLoop
  3561.  
  3562.  move.w Targetx,d0
  3563.  sub.w Viewerx,d0
  3564.  move.w d0,d2
  3565.  move.w Targetz,d1
  3566.  sub.w Viewerz,d1
  3567.  move.w d1,d3
  3568.  muls d2,d2
  3569.  muls d3,d3
  3570.  add.l d3,d2 
  3571.  beq .oksqr
  3572.  move.w #31,d4
  3573. .findhigh
  3574.  btst d4,d2
  3575.  dbne d4,.findhigh
  3576. .foundhigh
  3577.  asr.w #1,d4
  3578.  clr.l d3
  3579.  bset d4,d3
  3580.  move.l d3,d4
  3581.  
  3582.  move.w d4,d3
  3583.  muls d3,d3    ; x*x
  3584.  sub.l d2,d3    ; x*x-a
  3585.  asr.l #1,d3    ; (x*x-a)/2
  3586.  divs d4,d3    ; (x*x-a)/2x
  3587.  sub.w d3,d4    ; second approx
  3588.  bgt .stillnot0
  3589.  move.w #1,d4
  3590. .stillnot0
  3591.  
  3592.  move.w d4,d3
  3593.  muls d1,d3
  3594.  sub.l d2,d3
  3595.  asr.l #1,d3
  3596.  divs d4,d3
  3597.  sub.w d3,d4    ; second approx
  3598.  bgt .stillnot02
  3599.  move.w #1,d4
  3600. .stillnot02
  3601.  
  3602.  move.w d4,d3
  3603.  muls d3,d3
  3604.  sub.l d2,d3
  3605.  asr.l #1,d3
  3606.  divs d4,d3
  3607.  sub.w d3,d4    ; second approx
  3608.  bgt .stillnot03
  3609.  move.w #1,d4
  3610. .stillnot03
  3611.  
  3612. .oksqr
  3613.  
  3614.  
  3615.  move.w d4,d3
  3616.  asr.w #3,d3
  3617.  
  3618.  sub.w #4,d3
  3619.  bge.s OkItsnotzero
  3620.  moveq #0,d3
  3621. OkItsnotzero:
  3622.  
  3623.  cmp.w #31,d3
  3624.  bgt HitObjLoop
  3625.  neg.w d3
  3626.  add.w 32,d3
  3627.  
  3628.  move.w d6,d5
  3629.  muls d3,d5
  3630.  asr.l #5,d5
  3631.  cmp.w MaxDamage,d5
  3632.  blt.s okdamage
  3633.  move.w MaxDamage,d5
  3634. okdamage:
  3635.  add.b d5,damagetaken(a2)
  3636.  ext.l d0
  3637.  ext.l d1
  3638.  asl.l #4,d0
  3639.  asl.l #4,d1
  3640.  divs d3,d0
  3641.  divs d3,d1
  3642.  move.w d0,ImpactX(a2)
  3643.  move.w d1,ImpactZ(a2)
  3644.  
  3645.  bra HitObjLoop 
  3646.  
  3647. CheckedEmAll:
  3648.  
  3649. ; Now put in the flames!
  3650.  move.l (a7)+,a0
  3651.  
  3652.  move.w (a0),d0
  3653.  move.l ObjectPoints,a2
  3654.  move.w (a2,d0.w*8),d1
  3655.  move.w 4(a2,d0.w*8),d2
  3656.  
  3657.  move.w d1,middlex
  3658.  move.w d2,middlez
  3659.  
  3660.  move.w #9,d7
  3661.  
  3662.  clr.b exitfirst
  3663.  clr.b wallbounce
  3664.  move.w 12(a0),d0
  3665.  move.l ZoneAdds,a3
  3666.  move.l (a3,d0.w*4),a3
  3667.  add.l LEVELDATA,a3
  3668.  move.l a3,MiddleRoom
  3669.  
  3670.  move.l PlayerShotData,a3
  3671.  move.w 4(a0),d0
  3672.  ext.l d0
  3673.  asl.l #7,d0
  3674.  move.l d0,oldy
  3675.  
  3676.  moveq #2,d5
  3677.  move.w #19,NUMTOCHECK
  3678.  
  3679.  move.w #3,d6
  3680. radiusloop:
  3681.  move.w #2,d7
  3682.  
  3683. DOFLAMES:
  3684.  
  3685.  move.w NUMTOCHECK,d1
  3686. .findonefree
  3687.  move.w 12(a3),d2
  3688.  blt.s .foundonefree
  3689.  adda.w #64,a3
  3690.  dbra d1,.findonefree
  3691.  rts
  3692. .foundonefree
  3693.  
  3694.  move.w d1,NUMTOCHECK
  3695.  
  3696.  add.w #1,doneflames
  3697.  move.w middlex,d1
  3698.  move.w middlez,d2
  3699.  move.w d1,oldx
  3700.  move.w d2,oldz
  3701.  move.b ObjInTop(a0),StoodInTop
  3702.  
  3703.  jsr GetRand
  3704.  ext.w d0
  3705.  muls d5,d0
  3706.  asr.w #1,d0
  3707.  bne.s .xnz
  3708.  moveq #2,d0
  3709. .xnz:
  3710.  add.w d0,d1
  3711.  jsr GetRand
  3712.  ext.w d0
  3713.  muls d5,d0
  3714.  asr.w #1,d0
  3715.  bne.s .znz
  3716.  moveq #2,d0
  3717. .znz: 
  3718.  add.w d0,d2
  3719.  move.l oldy,d3
  3720.  jsr GetRand
  3721.  muls d5,d0
  3722.  asr.l #3,d0
  3723.  add.l d0,d3
  3724.  move.l d3,newy
  3725.  
  3726.  move.w d1,newx
  3727.  move.w d2,newz
  3728.  move.l MiddleRoom,objroom
  3729.  
  3730.  
  3731.  movem.l d5/d6/a0/a1/a3/d7/a6,-(a7)
  3732.  move.w #80,extlen
  3733.  move.b #1,awayfromwall
  3734.  jsr MoveObject
  3735.  movem.l (a7)+,d5/d6/a0/a1/a3/d7/a6
  3736.  
  3737.  move.l objroom,a2
  3738.  move.w (a2),12(a3)
  3739.  
  3740.  move.l newy,d0
  3741.  
  3742.  move.l ToZoneFloor(a2),d1
  3743.  move.l ToZoneRoof(a2),d2
  3744.  tst.b ObjInTop(a0)
  3745.  beq.s .okinbot
  3746.  move.l ToUpperFloor(a2),d1
  3747.  move.l ToUpperRoof(a2),d2
  3748. .okinbot:
  3749.  
  3750.  cmp.l d0,d1
  3751.  bgt.s .abovefloor
  3752.  move.l d1,d0
  3753. .abovefloor: 
  3754.  
  3755.  cmp.l d0,d2
  3756.  blt.s .belowroof
  3757.  move.l d2,d0
  3758. .belowroof:
  3759.  
  3760.  move.l d0,accypos(a3)
  3761.  asr.l #7,d0
  3762.  move.w d0,4(a3)
  3763.  move.b #2,16(a3)
  3764.  move.b #5,shotanim(a3)
  3765.  sub.b d5,shotanim(a3)
  3766.  st shotstatus(a3)
  3767.  move.b StoodInTop,ObjInTop(a3)
  3768.  move.b #2,shotsize(a3)
  3769.  st worry(a3)
  3770.  move.w (a3),d0
  3771.  move.l ObjectPoints,a2
  3772.  move.w newx,(a2,d0.w*8)
  3773.  move.w newz,4(a2,d0.w*8)
  3774.  
  3775.  adda.w #64,a3
  3776.  
  3777.  dbra d7,DOFLAMES
  3778.  add.w #1,d5
  3779.  dbra d6,radiusloop
  3780.  
  3781.  rts
  3782.  
  3783. MiddleRoom: dc.l 0
  3784. middlex: dc.w 0
  3785. middlez: dc.w 0
  3786. doneflames: dc.w 0
  3787.  
  3788. TESTAB: ds.l 200